【发布时间】:2015-01-09 12:20:05
【问题描述】:
我在那个类中创建了NSOperation 类,我调用NSURLConnection 来获取一些数据。
我正在使用NSOperation 类中的主线程调用NSURLConnection。
NSURLConnection 的委托设置为 NSOperation 类对象。
来自NSURLConnection 的调用来自主线程。
我需要使用相同的操作线程处理这些数据。我如何做到这一点?
@implementation ModelCreationSearchOperation {
int try;
}
- (BOOL)isConcurrent
{
return YES;
}
- (void)start
{
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
dispatch_async(dispatch_get_main_queue(), ^{
if (self.isCancelled) {
[self finish];
return;
}
});
[self fetchData];
}
-(void)fetchData {
dispatch_async(dispatch_get_main_queue(), ^{
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
});
}
- (void)finish
{
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
_isExecuting = NO;
_isFinished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
[self cancel];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//Main thread
//Want to perform parsing of response data on operation thread ....
}
【问题讨论】:
-
顺便说一句,与您手头的问题无关,
isCancelled逻辑不太正确。您应该在设置isExecuting并调用fetchData之前检查这一点。将它分派到主队列也没有意义(而且它会适得其反,因为您的return应该阻止提取发生,但是现在您只是从分派中返回,但是isExecuting和 @无论操作是否取消,都会发生 987654334@,我敢肯定,这不是您想要的)。另外,从 iOS 7 开始,你也应该实现isAsynchronous。 -
哦,是的……很棒的收获……谢谢……
标签: ios macos cocoa nsurlconnection nsoperation