NSInvalidArgumentException:*** - [NSConcreteMutableData initWithCapacity:]:荒谬容量:3794795864,最大大小:2147483648字节
我的iOS应用程序正在使用AFNetworking下载非常大的zip文件(3.79GB)。我的应用程序还使用Flipboard的FLEX库2.2来监视网络流量。用户报告说,一旦应用程序触发下载请求时,应用程序崩溃与下面的堆栈跟踪: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迷你他无法重现的问题,我可以知道如果年龄较大的iPad模型的32位限制(iPad 3的是造成这种情况下, )?造成这次事故的原因是什么?
我将禁用FLEX网络调试,作为解决此问题的解决方法。
更新
我可以成功下载该文件由[[FLEXManager sharedManager] setNetworkDebuggingEnabled:NO];
禁用FLEX之后,所以这是不相关的AFNetworking可言。
我的iOS应用程序正在下载一个非常大的zip文件
,一个NSMutableData正在上保留它表明该计划,这里就不多下载文件,但治疗的事实它作为数据在内存全程举行。这是非常错误的,尤其是。因为如果你的应用试图在内存中保存这么大的对象,它可能会崩溃。一个真实的下载将下载到磁盘和几乎没有内存将不得不搁置。
我可以告诉你如何使用NSURLSession来做到这一点,但我没有AFNetworking的知识,所以我把它留给你弄清楚如何下载到磁盘。 – matt