У меня есть метод в каком-то классе, который выполняет какую-то задачу, используя блок. Когда я выполняю этот метод с помощью NSInvocationOperation, управление никогда не переходит к блоку. Я пытался войти в блок, но на самом деле это никогда не вызывается. Но если я просто вызову этот метод с экземпляром этого класса, все будет работать так, как ожидалось.
Разве блоки не запускаются внутри NSOperation?
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:myClassObj selector:@selector(myClassMethod:) object:obj1];
[[AppDelegate sharedOpQueue] addOperation:op];
[op release];
- (void)myClassMethod:(id)obj
{
AnotherClass *otherClass = [[AnotherClass allco] init]
[otherClass fetchXMLWithCompletionHandler:^(WACloudURLRequest* request, xmlDocPtr doc, NSError* error)
{
if(error){
if([_delegate respondsToSelector:@selector(handleFail:)]){
[_delegate handleFail:error];
}
return;
}
if([_delegate respondsToSelector:@selector(doSomeAction)]){
[_delegate doSomeAction];
}
}];
}
- (void) fetchXMLWithCompletionHandler:(WAFetchXMLHandler)block
{
_xmlBlock = [block copy];
[NSURLConnection connectionWithRequest:request delegate:self];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if(_xmlBlock) {
const char *baseURL = NULL;
const char *encoding = NULL;
xmlDocPtr doc = xmlReadMemory([_data bytes], (int)[_data length], baseURL, encoding, (XML_PARSE_NOCDATA | XML_PARSE_NOBLANKS));
NSError* error = [WAXMLHelper checkForError:doc];
if(error){
_xmlBlock(self, nil, error);
} else {
_xmlBlock(self, doc, nil);
}
xmlFreeDoc(doc);
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
if(_xmlBlock) {
_xmlBlock(self, nil, error);
}
}
-parseXMLWithCompletionHandler:
в AnotherClass асинхронным? Возможно, вы захотите опубликовать код для этого метода, так как похоже, что все, что он делает для обратного вызова, не вызывается, и это не описано в приведенном выше коде. - person Brad Larson   schedule 19.11.2011parseXMLWithCompletionHandler:
, но показывает реализацию дляfetchXMLWithCompletionHandler:
. - person titaniumdecoy   schedule 21.11.2011