是NSOperation的子类,用于包装异步NSURLConnection。
NSURL *URL = [NSURL URLWithString:@"http://date.jsontest.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[ISHTTPOperation sendRequest:request handler:^(NSHTTPURLResponse *response, id object, NSError *error) {
if (error) {
return;
}
// completion
}];
使用sendRequest:handler:
执行的操作将被添加到[NSOperationQueue defaultHTTPQueue]
中。
[[ISHTTPOperationQueue defaultQueue] cancelAllOperations];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"request.HTTPMethod MATCHES %@", @"GET"];
[[ISHTTPOperationQueue defaultQueue] cancelOperationsUsingPredicate:predicate];
[[ISHTTPOperationQueue defaultQueue] cancelOperationsWithHTTPMethod:@"GET"];
[[ISHTTPOperationQueue defaultQueue] cancelOperationsWithHost:@"example.com"];
[[ISHTTPOperationQueue defaultQueue] cancelOperationsWithPath:@"/foo"];
将ISHTTPOperation/
目录下的文件添加到您的Xcode项目中。
观察[ISHTTPOperation sharedQueue]
的operationCount
键。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSOperationQueue *queue = [NSOperationQueue defaultHTTPQueue];
[queue addObserver:self forKeyPath:@"operationCount" options:0 context:NULL];
...
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"operationCount"]) {
UIApplication *application = [UIApplication sharedApplication];
NSOperationQueue *queue = [NSOperationQueue defaultHTTPQueue];
application.networkActivityIndicatorVisible = [queue operationCount] ? YES : NO;
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
要将数据处理添加到操作中,请重写processData:
方法。
此方法在子线程中调用。
例如,JSON解析
- (id)processData:(NSData *)data
{
NSError *error = nil;
id object = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&error];
if (error) {
NSLog(@"JSON error: %@", error);
}
return object;
}
版权 (c) 2013 Yosuke Ishikawa
任何获取此软件及相关文档副本(“软件”)的个人,免费允许在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件复制品,并允许提供给软件的人这样做,前提是本版权声明和许可声明应包含在所有复制品或实质部分中。
上述版权声明和本许可声明应包含在所有软件复制品或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这属于合同行为、侵权行为或其他,是否因软件或软件的使用或任何其他方式引起的。