在AFNetworking故障块中弹出UINavigationController

时间:2014-08-14 04:21:55

标签: ios uinavigationcontroller afnetworking-2

如何在AFNetworking 2故障阻止中弹出UINavigationController?我的代码如下:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSDictionary *params = @{@"request": @"get_sth"};
[manager POST:API_URL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
   // success block here, omitted
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // how can I pop UINavigationController here?
    // method 1
    [self.navigationController popViewControllerAnimated:YES];
    // method 2
    [self.navigationController performperformSelectorOnMainThread:@selector(popViewControllerAnimated:) withObject:[NSNumber numberWithBool:YES] waitUntilDone:NO];
}];

方法1和方法2都没有响应(没有错误,没有警告,没有崩溃,没有延迟)。我认为方法1不起作用,因为故障块在后台线程中运行。所以我使用方法2.与方法1相同的响应。

我的目标很简单:当网络操作失败时,弹回上一页。

在上面的案例中我错过了什么?

P.S。 self.navigationController不为空

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码并能够毫无问题地弹出viewcontroller。除非您在AFHTTPRequestOperation上明确设置队列,否则在主队列中调用AFHTTPRequestOperation块。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSDictionary *params = @{@“key”: @“value”};
[manager POST:URL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
   // success code
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  // failure code
    [self.navigationController popViewControllerAnimated:YES];
}];

另外,请确保在导航过渡完成之前没有按下并弹出控制器,这会产生未指定的过渡状态。