开发者

Terminating app due to uncaught exception 'NSGenericException

I am using UIImagePickerController to load saved photo from iphone library. but when I scroll images up or down my application crashing..

I get following error:

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] + 15开发者_JAVA百科2
    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

alled after throwing an instance of 'NSException'

Thanks in advance.


I had the same problem. I tried he first answer here : UIImagePickerController crashes on rapid scrolling, slower than photos app

replacing

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

by

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

It works like a charm now.


Open the releaseSegmentCache method of PLImageTable. You will find code similar to this:

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

But you are not allowed to change arrays when you are enumerating them. So you have to find another solution. You could save all objects that should be removed in another array, and then delete all those when you are done enumerating. Like this for example:

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


Look for a for loop that adds or removes objects from whatever it is iterating through. Probably in [PLImageTable releaseSegmentCache]. For example:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜