使用iOS 5的新TWRequest API,我遇到了与块使用相关的砖墙.
我需要做的是在收到第一个请求的成功响应后,立即触发另一个请求.在第二个请求的完成块上,然后我通知多步操作的成功或失败.
这大致是我正在做的事情:
- (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:...];
它执行第一个请求就好了,但是当我尝试使用处理程序启动第二个请求时,它会崩溃.这段代码出了什么问题?
创建请求的方法非常简单:
- (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; }
解决方法
确保您保留一个引用/保留拥有您用于签署TWRequests的ACAccount的ACAccountStore.
如果不这样做,ACAccount将变为无效,然后当您尝试触发与其签名的TWRequest时,您将获得EXC_BAD_ACCESS.