在 AFNetworking 故障块中弹出 UINavigationController
Posted
技术标签:
【中文标题】在 AFNetworking 故障块中弹出 UINavigationController【英文标题】:Pop UINavigationController in AFNetworking failure block 【发布时间】:2014-08-14 04:21:54 【问题描述】:如何在 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相同的响应。
我的目标很简单:当网络操作失败时,弹回上一页。
在上面的案例中我错过了什么?
附言self.navigationController
不为空
【问题讨论】:
你试过dispatch_async(dispatch_get_main_queue(), ^ // do pop );
- 作为一个远射,理论上这应该和performperformSelectorOnMainThread:
一样做
【参考方案1】:
我尝试了您的代码并且能够毫无问题地弹出视图控制器。在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];
];
还要确保您没有在导航转换完成之前推动和弹出控制器,这会产生意外的转换状态。
【讨论】:
以上是关于在 AFNetworking 故障块中弹出 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 2.0 从故障块中的代码 400 获取 JSON
在 AFNetworking 2 的失败块中访问 JSON 响应