2014-09-28 2 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 Serializer ..

- (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

Какая ошибка? –

+0

нет ошибки. Говорит: «Приложение на неожиданно прекращено. Сообщение от отладчика: завершено из-за ошибки памяти« – nserror

+0

Это известная проблема, о которой сообщалось ранее. Я обновил answe. Будет также подан билет для AFNetworking. – bllakjakk

ответ

0

Update: Так у вас есть 2 варианта решения этого:

BLOCKQUOTE

Используйте NSJSONReadingMutableContainers как варианты

Blockquote

Если предыдущий делает не работает, вы столкнулись с известной проблемой, как показано ниже:

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

Так теперь у вас есть 2 варианта:

  1. Использование родной JSON Serialization
  2. загрузив файлы в формате JSON на диск без использования AFNetworking и чем разобрать.
+0

нет кости. такой же проблема после этого изменение. – nserror

+0

Обновленный ответ. – bllakjakk