2011-04-21 33 views
2

我正在使用UIImagePickerController從iphone庫中加載保存的照片。 但是當我滾動的圖像向上或向下我的應用程序崩潰..終止應用程序,由於未捕獲異常'NSGenericException

我獲得以下錯誤:

2011-04-21 14:26:33.357 Exchange[72452:5803] Running conversion tracker in a background thread. 
2011-04-21 14:26:40.449 Exchange[72452:207] upload from gallery event here 
2011-04-21 14:26:42.277 Exchange[72452:207] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x6dc35a0> was mutated while being enumerated.(
    "<PLImageTableSegment: 0x6937f80>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>", 
    "<PLImageTableSegment: 0x6937f80>" 
)' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x015645a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x016b8313 objc_exception_throw + 44 
    2 CoreFoundation      0x01564069 __NSFastEnumerationMutationHandler + 377 
    3 CoreFoundation      0x0155d838 -[__NSArrayM dealloc] + 152 
    4 PhotoLibrary      0x0608d696 +[PLImageTable releaseSegmentCache] + 37 
    5 PhotoLibrary      0x0606cf5a -[PLPhotoLibrary dealloc] + 183 
    6 CoreFoundation      0x0147b04c CFRelease + 92 
    7 CoreFoundation      0x014a018d _CFAutoreleasePoolPop + 237 
    8 Foundation       0x000e33eb -[NSAutoreleasePool release] + 167 
    9 UIKit        0x003943ee _UIApplicationHandleEvent + 8792 
    10 GraphicsServices     0x01d9c992 PurpleEventCallback + 1550 
    11 CoreFoundation      0x01545944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    12 CoreFoundation      0x014a5cf7 __CFRunLoopDoSource1 + 215 
    13 CoreFoundation      0x014a2f83 __CFRunLoopRun + 979 
    14 CoreFoundation      0x014a2840 CFRunLoopRunSpecific + 208 
    15 CoreFoundation      0x014a2761 CFRunLoopRunInMode + 97 
    16 GraphicsServices     0x01d9b1c4 GSEventRunModal + 217 
    17 GraphicsServices     0x01d9b289 GSEventRun + 115 
    18 UIKit        0x00397c93 UIApplicationMain + 1160 
    19 ArmaniExchange      0x000022a4 main + 102 
    20 ArmaniExchange      0x00002235 start + 53 
    21 ???         0x00000001 0x0 + 1 
) 
terminate c 

提前拋出的「NSException」

感謝實例後alled。

+1

可能,您在迭代時正在更改數組。就像在迭代它的循環中從數組中移除對象一樣。 – 2011-04-21 21:37:08

回答

3

打開releaseSegmentCache方法PLImageTable。你會發現類似這樣的代碼:

for (id object in array) { 
    // do something with object 
    if ([object meetsCondition:@"Foo"]) { 
     [array removeObject:object]; 
    } 
} 

但是,當你枚舉它們時,你不允許改變數組。所以你必須找到另一個解決方案。您可以保存應該在另一個數組中刪除的所有對象,然後在枚舉完成後刪除所有這些對象。像這樣,例如:

NSMutableArray *objectsToDelete = [NSMutableArray array]; 
for (id object in array) { 
    // do something with object 
    if ([object meetsCondition:@"Foo"]) { 
     [objectsToDelete addObject:object]; 
    } 
} 
[array removeObjectsInArray:objectsToDelete]; 
0

尋找一個for循環,該循環從任何迭代中添加或刪除對象。可能在[PLImageTable releaseSegmentCache]。例如:

for (NSString *string in stringsArray) { 
    [stringsArray removeObject:string]; 
} 
相關問題