从2年开始,我一直在尝试不同的方法来找到应用程序崩溃的解决方案,同时点击后退按钮。
我的应用场景:
在tableview控制器中我必须加载用户列表,在视图上加载我调用getData(Asyncronous download)API方法来加载数据。在数据下载时,如果用户按下后退按钮,我的应用程序会因空值对象而崩溃。这说明我的所有可变内存都已取消分配。
为了克服这个问题,我使用了一些加载指示器来锁定UIScreen,直到下载数据。
问题:
需要帮助来恢复此问题
以下是我下载数据的示例代码: 下面的代码不会崩溃应用程序。但即使我取消对dealloc的操作,它也会下载数据 的 viewDidLoad中:
ShowNetworkActivityIndicator();
_processQueue = [[NSOperationQueue alloc] init];
_processQueue.maxConcurrentOperationCount = 4;
_processQueue.name = @"Events Processing";
[self loadData];
loadData:
- (无效)loadData { [_processQueue addOperationWithBlock:^ {
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[[NSURL alloc] initWithString:@"https://restcountries.eu/rest/v1/all"]];
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSDictionary *search = [NSJSONSerialization JSONObjectWithData:[data dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
[[NSOperationQueue mainQueue] addOperationWithBlock: ^ {
_countryListArray=[search mutableCopy];
[self.tableViewSample reloadData];
HideNetworkActivityIndicator();
}];
}];
}
我在dealloc中尝试了cancelAllOperations:
[_processQueue setSuspended:YES];
[_processQueue cancelAllOperations];
答案 0 :(得分:0)
你可以尝试插入重装数据是dispatch_async(dispatch_get_main(),void(^){});回调,主线程,我认为在后台线程中发生的重载正在崩溃应用程序。
[[NSOperationQueue mainQueue] addOperationWithBlock: ^ { _countryListArray=[search mutableCopy]; dispatch_async(dispatch_get_main_queue(), ^{
[self.tableViewSample reloadData];
HideNetworkActivityIndicator();
});}];