AFNetworking Issue - 取消视图控制器时的取消操作

时间:2015-07-04 16:13:18

标签: ios objective-c afnetworking-2

在发出异步GET请求时解除视图控制器时出现崩溃。我试图做的是结束viewWillDissapear中的所有操作,但我仍然遇到崩溃。有什么想法解决这个问题是什么?

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[AFHTTPRequestOperationManager manager].operationQueue cancelAllOperations];
}




AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSMutableArray *responseArray = [responseObject mutableCopy];
    NSMutableIndexSet *indexesToDelete = [NSMutableIndexSet indexSet];
    NSUInteger currentIndex = 0;
    for (NSDictionary *track in responseArray) {
        if ([track objectForKey:@"streamable"] == [NSNumber numberWithBool:false]) {
            [indexesToDelete addIndex:currentIndex];
        }
        currentIndex++;
    }
    [responseArray removeObjectsAtIndexes:indexesToDelete];
    completion((NSArray *) responseArray, (BOOL) NO);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
    completion((NSArray *) nil, (BOOL) YES);
    [[NSNotificationCenter defaultCenter]postNotificationName:@"networkError" object:nil];
}];

2 个答案:

答案 0 :(得分:0)

避免此类崩溃的一个好方法是将数据与View控制器分开。基本上你会有数据管理器来保存数据,这将是一个将用于整个应用程序会话的单例。视图控制器将从此数据管理器读取数据,如果不可用,将通过DataMgr发出Http请求,并且DataMgr将接收响应。收到响应后,DataMgr将发送通知以更新视图控制器的UI仍然可用。

此模式可帮助您摆脱崩溃,并在一个地方整理所有数据。并且还拒绝了到服务器的往返行程,也节省了设备上的电池。

在您的代码中,我注意到您要取消所有请求,并且不建议这样做。您应该在那里做的是停止所有通知侦听器,并在视图加载时注册侦听器。

目前,如果您可以分享更多的代码并且崩溃可能是新的,我可以准确地说出出了什么问题。使用带有__weak的块,在此处使用google以获取更多信息。

答案 1 :(得分:0)

当你取消操作时,会调用failure块,所以无论你做什么

completion((NSArray *) nil, (BOOL) YES);
[[NSNotificationCenter defaultCenter]postNotificationName:@"networkError" object:nil];

是导致您崩溃的原因。