【发布时间】:2011-12-28 22:48:23
【问题描述】:
使用 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 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;
}
【问题讨论】:
-
请发
createFirstRequest和createSecondRequest的代码 -
你能把
-createSecondRequest的代码贴出来吗?我猜这段代码在后台线程上运行存在问题,因为无法保证完成处理程序将在哪个线程上运行。 -
完成;抱歉,我认为这无关紧要。
-
@brunodecarvalho:如果您想了解相关内容,请在需要发布示例代码时创建minimal test case。
标签: objective-c cocoa-touch uikit objective-c-blocks twrequest