在块中使用NSUserDefaults会导致内存崩溃
问题描述:
我正在使用AfNetworking发出POST请求。在完成块中收到响应后,进度hud视图被解除,并在NSUserDefaults中保存一些数据。但是当我运行应用程序时,UI不会更新并等待应用程序崩溃以解决内存问题。在块中使用NSUserDefaults会导致内存崩溃
这是我的示例代码:
[[HTAPIClient sharedClient] POST:requestAddress
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
if ([responseObject objectForKey:@"default_source"]) {
NSUserDefaults *usd = [NSUserDefaults standardUserDefaults];
[usd setObject:[responseObject objectForKey:@"default_source"] forKey:@"payViaCreditCard"];
[usd synchronize];
}
NSDictionary *sources = [responseObject objectForKey:@"sources"];
if (sources) {
NSArray *data = [sources objectForKey:@"data"];
if (data) {
// some code
}
}
[self.navigationController popViewControllerAnimated:YES];
[SVProgressHUD dismiss];
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
// some failure
}];
不知道如何解决这个问题?
感谢您的任何提前!
编辑:
这是说,在年底的XCode:
该应用程序的 “iPhone”, “MyApp的” 意外退出。从调试 消息:由于终止内存错误
答
试试这个
NSDictionary *sources = [responseObject objectForKey:@"sources"];
if (sources) {
NSArray *data = [sourcesobjectForKey:@"data"];
if (data) {
// some code
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD dismiss];
[self.navigationController popViewControllerAnimated:YES];
});
+0
不,它没有帮助。当我评论使用NSUserDefaults的代码(3行),通常UI更新时,会发生有趣的事情。 –
控制台登录吗? – vichevstefan
我还没有在AFN2中检查过,但是我猜主程序调用了成功块(除非你改变了它)? – Wain
是的,成功块在主线程上被调用,并且我没有改变行为。 –