Из-за асинхронного характера замыканий или блоков завершения я понимаю, что невозможно «вернуть» значение непосредственно из одного.Однако в моем пользовательском интерфейсе для приложения чата это приемлемо - и фактически необходимо дождаться ответа.Поэтому мой вопрос заключается в том, каков наилучший способ приостановить любое действие, пока у вас не будет ответа, и, во-вторых, вернуть ответ вызывающему методу.
Это то, что я хотел бы сделать, чего я не делаю 'Не думаю, что вы можете сделать ...
(NSString*) getStringFromRemoteResource {
[self goGetString:^(NSString *string,NSError *error){
NSLog(@"retrieved string is%@",string);
return string;//NOT ALLOWED
}];
}
// С другой стороны, вы можете сделать это, когда возврат недействителен
(void) getStringFromRemoteResource {
[self goGetString:^(NSString *string,NSError *error){
NSLog(@"string is%@",string);
[self doSomethingWithString];
}];
}
В моем коде менеджер, который вызываетМетод выше должен вернуть значение.
(NSString*) chatManager {
[self getStringFromRemoteResource];
//do other stuff
return string;
}
Так что мой вопрос после вызова getStringFromRemoteResource как мне вернуть результат в manageChat, чтобы вернуть его в пользовательский интерфейс.Или как выглядит SomethingWithString?Я не хочу кардинально менять chatManager, так как он делает кучу других вещей.
Заранее благодарен за любые предложения