2016-03-15 2 views
0

My iOS app загружает очень большой zip-файл (3,79 ГБ), используя AFNetworking. Мое приложение также использовало библиотеку Flipboard FLEX для мониторинга сетевого трафика. Пользователь сообщил, что когда приложение запуска запроса загрузки, приложение падает со следующим StackTrace:NSInvalidArgumentException: *** - [NSConcreteMutableData initWithCapacity:]: абсурдная емкость: 3794795864, максимальный размер: 2147483648 байт

Crashed Thread 

0 CoreFoundation 0x22c6010b __exceptionPreprocess + 124 
1 libobjc.A.dylib 0x22406e17 objc_exception_throw + 36 
2 CoreFoundation 0x22c60051 +[NSException raise:format:] + 110 
3 Foundation 0x233bed7d -[NSConcreteMutableData initWithCapacity:] + 106 
4 previewer 0x001e9c3d __86-[FLEXNetworkObserver(NSURLConnectionHelpers) connection:didReceiveResponse:delegate:]_block_invoke (FLEXNetworkObserver.m:946) 
5 libdispatch.dylib 0x227d9b5b _dispatch_call_block_and_release + 8 
6 libdispatch.dylib 0x227e675b _dispatch_queue_drain$VARIANT$mp + 1756 
7 libdispatch.dylib 0x227e5d99 _dispatch_queue_invoke$VARIANT$mp + 282 
8 libdispatch.dylib 0x227e8495 _dispatch_root_queue_drain + 394 
9 libdispatch.dylib 0x227e8305 _dispatch_worker_thread3 + 94 
10 libsystem_pthread.dylib 0x22997b29 _pthread_wqthread + 1022 
11 libsystem_pthread.dylib 0x22997718 start_wqthread + 6 

Крушение Причина:

NSInvalidArgumentException: *** - [NSConcreteMutableData initWithCapacity]: абсурдная мощность: 3794795864, максимальный размер: 2147483648 байт

и это происходит в следующих строках на FLEXNetworkObserver:

if (response.expectedContentLength < 0) { 
    dataAccumulator = [[NSMutableData alloc] init]; 
} else { 
    dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength]; 
} 

Он использовал IPad 3, и он сказал, что он не может воспроизвести проблему, используя его более новый IPad мини 3. Могу ли я знать, если это вызвано 32-битным ограничения старой модели IPad (в данном случае IPad 3)? В чем причина аварии?

Я отключу отладку сети FLEX как обходной путь этой проблемы.

Update

Я могу успешно загрузить файл после отключения FLEX по [[FLEXManager sharedManager] setNetworkDebuggingEnabled:NO];, так что это не связано с AFNetworking вообще.

ответ

1

Мой IOS приложение загружает очень большой почтовый файл

Тот факт, что NSMutableData создается в сторону, чтобы держать это говорит о том, что план здесь не скачать файл, но для лечения это как данные все время в память. Это очень неправильно, особенно. так как ваше приложение может сбой, если оно попытается удерживать такой большой объект в памяти. A true скачать скачайте на диск и практически никакой памяти не нужно откладывать.

+1

Я мог бы рассказать вам, как это сделать с помощью NSURLSession, но я не знаю об AFNetworking, поэтому я оставляю его вам, чтобы выяснить, как сделать загрузку на диск. – matt

Смежные вопросы