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