AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是
NSURLSessionConfiguratio
下面我们借用TuneStore的API 来完成AFURLSessionManager的讲解.
如果您在看这边文章之前 我建议您首先阅读下AFNetworking2.0的官方新特性介绍.
- AFNetworking 2.0 Migration Guide
- 你如果之前用过AF1.0 这个是很有必要来看的.
- AFNetworking 2.0 Docs
- AFNetworking 2.0 Source
另外T*witer 上说NSHipster的AFNetworking现在翻译成中文了,所以我搬过来了有兴趣的朋友也可以去看下,https://github.com/NSHipster/articles/blob/zh-Hans/2013-09-16-afnetworking-2.md
1:创建 client search iTunes
#import "AFHTTPSessionManager.h"
@interface ITunesClient : AFHTTPSessionManager
+ (ITunesClient *)sharedClient;
- (NSURLSessionDataTask *)searchForTerm:(NSString *)term completion:( void (^)(NSArray *results, NSError *error) )completion;
@end
#import "ITunesClient.h"
@implementation ITunesClient
+ (ITunesClient *)sharedClient {
static ITunesClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURL *baseURL = [NSURL URLWithString:@"https://itunes.apple.com/"];
NSURLSessionConfiguratio n *config = [NSURLSessionConfiguratio n defaultSessionConfigurat ion];
[config setHTTPAdditionalHeaders :@{ @"User-Agent" : @"TuneStore iOS 1.0"}];
//设置我们的缓存大小 其中内存缓存大小设置10M 磁盘缓存5M NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:10 * 1024 * 1024
diskCapacity:50 * 1024 * 1024
diskPath:nil];
[config setURLCache:cache];
_sharedClient = [[ITunesClient alloc] initWithBaseURL:baseURL
sessionConfiguration:config];
_sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
});
return _sharedClient;
}
- (NSURLSessionDataTask *)searchForTerm:(NSString *)term completion:( void (^)(NSArray *results, NSError *error) )completion {
NSURLSessionDataTask *task = [self GET:@"/search"
//为了速度我们将地区设置为台湾 parameters:@{ @"country" : @"TW",
@"term" : term }
success:^(NSURLSessionDataTask *task, id responseObject) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
if (httpResponse.statusCode == 200) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(responseObject[@"results"], nil);
});
} else {
dispatch_async(dispatch_get_main_queue(), ^{
completion(nil, nil);
});
NSLog(@"Received: %@", responseObject);
NSLog(@"Received HTTP %d", httpResponse.statusCode);
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(nil, error);
});
}];
return task;
}
@end
Note:为了便于对这个任务进行(取消,监控等)操作 我们将这个任务返回.
2: 在view controller对client进行回调
NSURLSessionDataTask *task = [[ITunesClient sharedClient] searchForTerm:term
completion:^(NSArray *results, NSError *error) {
if (results) {
self.results = results;
[self.tableView reloadData];
} else {
NSLog(@"ERROR: %@", error);
}
}];
3: AFNetworking UIKit 之 加载网络图片
每一个cell 我们可以利用 AFNetworking对UIImageView的 category #import "UIImageView+AFNetworking.h"
cellForRowAtIndexPath:
方法下直接使用即可
cell.artworkImageView.image = nil;
[cell.artworkImageView cancelImageRequestOperat ion];
NSURL *imageURL = [NSURL URLWithString:record[@"artworkUrl100"]];
if (imageURL) {
[cell.artworkImageView setImageWithURL:imageURL];
}
4:当任务运行时显示 activity indicator
导入 #import "UIActivityIndicatorView+AFNetworking.h"
[self.activityIndicator setAnimatingWithStateOfT ask:task];
本文转自:http://blog.youkuaiyun.com/hufengvip/article/details/17338853