如何在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];
}];
另外,请确保在导航转换完成之前不会推入和弹出控制器,这会导致意外的转换状态。