2014-09-28 152 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