해당 클래스에 NSOperation
클래스를 생성했습니다. NSURLConnection
을 호출하여 일부 데이터를 가져옵니다. NSOperation
클래스 내부에서 메인 스레드를 사용하여 NSURLConnection
으로 전화를 겁니다. NSURLConnection
의 대리자가 NSOperation
클래스 개체로 설정되어 있습니다. 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과' op가 취소되었는지 여부에 관계없이 fetchData가 발생합니다. 이는 의도 한 것과 다릅니다. 또한 iOS 7을 시작하면'isAsynchronous'도 구현해야합니다. – Rob
오 예 ... 대단한 잡다한 .. 감사 ... –