2011-10-07 33 views
0

當您滾動UIImagePickerController彈出窗口時,我的iPad應用程序崩潰,無論是PhotoLibrary還是PhotosAlbum變種。我在專輯中有大約130張圖像,當您滾動列表以將更多縮略圖帶入視圖時,會發生崩潰。我在iOS 2.x here的模擬器中發現了其他一些UIImagePicker問題,但這似乎並不相關。這裏的崩潰報告:UIImagePickerController - 枚舉時發生變異

2011-10-07 11:18:17.309 Experiences[1419:707] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x343fe0> was mutated while being enumerated.(
    "<PLImageTableSegment: 0x343fc0>", 
    "<null>", 
    "<null>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>", 
    "<PLImageTableSegment: 0x343fc0>" 
)' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x319b864f __exceptionPreprocess + 114 
    1 libobjc.A.dylib      0x34af4c5d objc_exception_throw + 24 
2 CoreFoundation      0x319b7edf __NSFastEnumerationMutationHandler + 214 
    3 libobjc.A.dylib      0x34afb36d objc_enumerationMutation + 24 
    4 CoreFoundation      0x31922b9d -[__NSArrayM dealloc] + 80 
5 CoreFoundation      0x3191cc43 -[NSObject(NSObject) release] + 30 
6 PhotoLibrary      0x3733ba81 +[PLImageTable releaseSegmentCache] + 20 
7 PhotoLibrary      0x3732a4ed -[PLPhotoLibrary dealloc] + 116 
8 CoreFoundation      0x3191cc43 -[NSObject(NSObject) release] + 30 
9 CoreFoundation      0x3191d1a1 CFRelease + 68 
10 CoreFoundation      0x3191febb _CFAutoreleasePoolPop + 146 
11 Foundation       0x30efe1cb -[NSAutoreleasePool release] + 98 
12 UIKit        0x36f0ff0f _UIApplicationHandleEvent + 5790 
13 GraphicsServices     0x35a10e77 PurpleEventCallback + 666 
14 CoreFoundation      0x3198fa97 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26 
15 CoreFoundation      0x3199183f __CFRunLoopDoSource1 + 166 
16 CoreFoundation      0x3199260d __CFRunLoopRun + 520 
17 CoreFoundation      0x31922ec3 CFRunLoopRunSpecific + 230 
18 CoreFoundation      0x31922dcb CFRunLoopRunInMode + 58 
19 GraphicsServices     0x35a1041f GSEventRunModal + 114 
20 GraphicsServices     0x35a104cb GSEventRun + 62 
21 UIKit        0x36f3ad69 -[UIApplication _run] + 404 
22 UIKit        0x36f38807 UIApplicationMain + 670 
23 Experiences       0x00002e77 main + 82 
24 Experiences       0x00002e20 start + 40 
) 
terminate called after throwing an instance of 'NSException' 

及這裏的調用的UIImagePickerController酥料餅代碼:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType 
{ 
    if ([self.cameraPopoverViewController isPopoverVisible]) { 
     DLog(@"requesting cameraPopover dismissal"); 
     [self.cameraPopoverViewController dismissPopoverAnimated:YES]; 
    } 

    // Set up the imagePicker common parameters 
    UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate     = self; 
    imagePicker.mediaTypes     = [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil]; 
    imagePicker.allowsEditing    = YES; 
    imagePicker.sourceType     = sourceType; 
    DLog(@"imagePicker %@", imagePicker); 

    self.newMedia = NO; 

    switch (imagePicker.sourceType) { 
     case UIImagePickerControllerSourceTypeCamera: { 
      [self presentModalViewController:imagePicker 
            animated:YES]; 
      self.newMedia = YES; 
      break; 
     } 
     case UIImagePickerControllerSourceTypePhotoLibrary: 
      // These two cases are identical, just fall through into PhotosAlbum case... 
     case UIImagePickerControllerSourceTypeSavedPhotosAlbum: { 
      if (self.pickerPopoverViewController) { 
       // Should never occur if pickers are getting dismissed properly... 
       ALog(@"had a stranded pickerPopover!"); 
       self.pickerPopoverViewController = nil; 
      } 
      pickerPopoverViewController = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
      // Set up the rect from which the popover should hang 
      CGRect popoverRect = [cameraBtn convertRect:cameraBtn.bounds 
               toView:self.view]; 
      // ...and display the popover "hanging" from the cameraBtn 
      [self.pickerPopoverViewController presentPopoverFromRect:popoverRect 
                   inView:self.view 
              permittedArrowDirections:UIPopoverArrowDirectionUp 
                  animated:YES];    
      break; 
     } 

     default: 
      break; 
    } 
    [imagePicker release]; 
} 

在我看來像一些圖像/ imageThumbnails越來越釋放,(因此突變集合)。但我不知道該怎麼辦...

回答

3

我剛遇到類似的問題。 通過試驗和錯誤,我發現如果您使用UIImagePickerControllerSourceTypePhotoLibrary作爲imagepicker的源類型,它將正常工作。 但使用UIImagePickerControllerSourceTypeSavedPhotosAlbum會使應用​​程序崩潰。

+0

感謝您的幫助 - 這是我對iOS 4.x的解決方法。看起來蘋果可能已經解決了iOS 5中的問題(我想大量重寫iCloud Photostreaming)。 –

相關問題