2014-09-28 116 views
0

我使用AFHTTPRequestOperation服务器在AfNetworking得到响应数据2.0jsonObjectWithData导致内存崩溃?

NSURLRequest *request = [[ServiceHelper instance] getRequestData:postDict :[ServicesConfiguration GET_DOCUMENTS_URL]]; 
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
     manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
     manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

     AFHTTPRequestOperation *requestOperation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { 

      NSDictionary *returnData = [[ServiceHelper instance] getReturnDictionary:responseObject]; 

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }]; 

的getReturnDictionary方法呼吁responseObject是一个简单的JSON序列..

- (NSDictionary *) getReturnDictionary : (NSData *) data { 

    if (data == nil) { 
     return [NSDictionary dictionary]; 
    } 

    NSError * error = nil; 
    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

    if (error != nil) { 
     NSLog(@"Error parsing JSON: %@",error); 
     return [NSDictionary dictionary]; 
    } 
    else 
     return jsonDict; 
} 

这工作得很好少量的数据。但是,当响应对象是像100MB,应用程序挂起

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

,然后在约15秒后,该应用程序崩溃由于存储器错误。 我认为它的数据大小非常自我解释,但它不应该能够处理它?

如果我直接从[NSURLConnection sendSynchronousRequest:]获取数据; - 它没有挂起或崩溃的作品。由于这是我最初做的 - 但切换到AFNetworking更容易显示进度条。

任何想法或技巧值得赞赏。

+1

什么是确切的错误? – 2014-09-28 02:04:46

+0

没有错误。说:“上的应用程序意外终止。调试器发出的消息:由于存储器错误而终止” – nserror 2014-09-28 02:33:25

+0

这是一种已知的问题,这是以前报告过的。我更新了回答。还将为AFNetworking提交一张票。 – bllakjakk 2014-09-28 03:17:22

回答

0

更新: 所以你有2个选项来解决这个问题:

块引用

使用NSJSONReadingMutableContainers作为选项

块引用

如果以前不不工作,你都面临着类似下面的已知问题:

iOS Download & Parsing Large JSON responses is causing CFData (store) leaks

所以,现在你有两个选择:

  1. 使用原生JSON序列化
  2. 首先,JSON文件下载到硬盘,而无需使用AFNetworking而不是解析。
+0

没有骰子。这个改变后的同样的问题。 – nserror 2014-09-28 03:08:02

+0

已更新的答案。 – bllakjakk 2014-09-28 05:30:24