здания на качестве earlier вопрос: У меня есть NSOperationQueue
, который выглядит следующим образом:NSOperationQueue с синхронным NSURLConnection
NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{
[someObject someSelector];
}];
NSBlockOperation *block2= [NSBlockOperation blockOperationWithBlock:^{
[someObject anotherSelector];
}];
[block2 addDependency:block1];
[queue addOperation:block1];
[queue addOperation:block2];
Теперь внутри someSelector
у меня есть:
returnData = [requesterObj getDataWithURL:(NSString*)url];
где getDataWithURL
содержит что-то вроде:
NSURL *requestUrl = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:timeout];
NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
Теперь, когда я добавляю точки останова, кажется, что второй блок вызывается перед тем, как NSURLConnection
с первого блока заканчивается. Предположительно, потому что вызов getDataWithURL
, сам по себе является асинхронным. Каков наилучший способ убедиться, что первый блок не будет завершен до того, как этот запрос вернется. Должен ли я попытаться использовать NSInvocation
для размещения данных внутри returnData
?
Это должен быть решен путем установки зависимостей правильно. В опубликованном коде вы ** начинаете ** выполнять операции блока без установки зависимостей! Итак, что вы имеете в виду с _Assume также, что я установил зависимости ...? Можете ли вы разместить соответствующий код, где вы их установили? – Leijonien
Нет, зависимости заданы правильно. Проблема заключается в том, что 'NSBlockOperation' не знает, что запрос async еще не завершен - он предполагает, что все материалы будут завершены после завершения блока. –