iOS 5 の新しいTWRequest
API を使用して、ブロックの使用に関連するレンガの壁に遭遇しました。
私がしなければならないことは、最初のリクエストに対して成功したレスポンスを受け取ったら、すぐに別のリクエストを開始することです。2 番目のリクエストの完了ブロックで、マルチステップ オペレーションの成功または失敗を通知します。
これが私がやっているおおよそのことです:
- (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
}];
}];
}
私はどちらのリクエストも保持していませんし、それらへの参照をどこにも保持していません。それはただのファイアアンドフォーゲットです。
ただし、アプリを実行すると、次のようにクラッシュしEXC_BAD_ACCESS
ます。
[secondRequest performRequestWithHandler:...];
最初のリクエストは問題なく実行されますが、ハンドラーを使用して 2 番目のリクエストを起動しようとすると、クラッシュします。そのコードの何が問題になっていますか?
リクエストを作成する方法は次のように簡単です。
- (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;
}