асинхронность почти всегда лучше. но если вы хотите синхронно:
-(id)performRequest:(id)args
{
__block NSData *data = nil;
[xyzclass requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
data = [NSData dataWithData:responseData];
}];
while(!data) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
return data;
}
Отказ от ответственности:
CocoaCouchDeveloper говорит, что, конечно, это будет работать только в том случае, если блок завершения и цикл запуска находятся в одном потоке.
Я предположил, что, поскольку многие (большинство) обработчики COMPLETION, которые я знаю, работают именно так, но в принципе это справедливо.
Вышеуказанное не безопасно для потоков
используйте семафор или что-то еще.
также я сказал, что не продвигаю это