2016-03-15 86 views
0

我的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可言。

回答

1

我的iOS應用程序正在下載一個非常大的zip文件

,一個NSMutableData正在上保留它表明該計劃,這裏就不多下載文件,但治療的事實它作爲數據內存全程舉行。這是非常錯誤的,尤其是。因爲如果你的應用試圖在內存中保存這麼大的對象,它可能會崩潰。一個真實的下載將下載到磁盤和幾乎沒有內存將不得不擱置。

+1

我可以告訴你如何使用NSURLSession來做到這一點,但我沒有AFNetworking的知識,所以我把它留給你弄清楚如何下載到磁盤。 – matt