由于未捕获的异常'NSGenericException而终止应用程序

时间:2011-04-21 21:34:30

标签: iphone

我正在使用UIImagePickerController从iphone库加载保存的照片。 但当我向上或向下滚动图像时,我的应用程序崩溃..

我收到以下错误:

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'的实例后

提前致谢。

3 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我试过他先在这里回答:UIImagePickerController crashes on rapid scrolling, slower than photos app

替换

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

通过

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

它现在就像一个魅力。

答案 1 :(得分:3)

打开releaseSegmentCache的{​​{1}}方法。您将找到与此类似的代码:

PLImageTable

但是在枚举它们时不允许更改数组。所以你必须找到另一种解决方案。您可以保存应该在另一个数组中删除的所有对象,然后在完成枚举后删除所有这些对象。像这样举例如:

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

答案 2 :(得分:0)

寻找一个for循环,用于添加或删除任何迭代的对象。可能在[PLImageTable releaseSegmentCache]。例如:

for (NSString *string in stringsArray) {
   [stringsArray removeObject:string];
}