在块中使用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的” 意外退出。从调试 消息:由于终止内存错误

+0

控制台登录吗? – vichevstefan

+0

我还没有在AFN2中检查过,但是我猜主程序调用了成功块(除非你改变了它)? – Wain

+0

是的,成功块在主线程上被调用,并且我没有改变行为。 –

试试这个

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更新时,会发生有趣的事情。 –