Используя новый TWRequest
API в iOS 5, я столкнулся с кирпичной стеной, связанной с использованием блоков.
Мне нужно сделать так: после получения успешного ответа на первый запрос, сразу же выполнить еще один. В блоке завершения второго запроса я сообщаю об успехе или неудаче многоэтапной операции.
Вот примерно что я делаю:
- (void)doRequests
{
TWRequest* firstRequest = [self createFirstRequest];
[firstRequest performRequestWithHandler:^(NSData* responseData,
NSHTTPURLResponse* response,
NSError* error) {
// Error handling hidden for the sake of brevity...
TWRequest* secondRequest = [self createSecondRequest];
[secondRequest performRequestWithHandler:^(NSData* a,
NSHTTPURLResponse* b,
NSError* c) {
// Notify of success or failure - never reaches this far
}];
}];
}
Я не сохраняю ни один из запросов и нигде не храню ссылки на них; это просто fire-and-forget.
Однако, когда я запускаю приложение, оно падает с ошибкой EXC_BAD_ACCESS
on:
[secondRequest performRequestWithHandler:...];
Оно прекрасно выполняет первый запрос, но когда я пытаюсь запустить второй запрос с обработчиком, оно падает. Что не так с этим кодом?
Методы для создания запросов просты:
- (TWRequest*)createFirstRequest
{
NSString* target = @"https://api.twitter.com/1/statuses/home_timeline.json";
NSURL* url = [NSURL URLWithString:target];
TWRequest* request = [[TWRequest alloc]
initWithURL:url parameters:params
requestMethod:TWRequestMethodGET];
// _twitterAccount is the backing ivar for property 'twitterAccount',
// a strong & nonatomic property of type ACAccount*
request.account = _twitterAccount;
return request;
}