如何在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。

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

在上述情况下我会错过什么?

ps。 self.navigationController不为null

最佳答案

我尝试了您的代码,并能够毫无问题地弹出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];
}];

另外,请确保在导航转换完成之前不会推入和弹出控制器,这会导致意外的转换状态。

09-30 00:19