gonzobrains
gonzobrains

Reputation: 8036

iOS PhotoPicker sample crashes under 4.0 simulator

I tried to run the PhotoPicker example from Apple and it crashes under the 4.0 simulator. It doesn't crash under 4.3 though. Anyone have this problem? Did something change between SDK versions that would cause this nil object issue?

It dies on this line:

// as a delegate we are being told a picture was taken
- (void)didTakePicture:(UIImage *)picture
{
    [self.capturedImages addObject:picture];
}

Here is the Error output:

GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Sat Feb 12 02:52:12 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".Attaching to process 79426.
2011-07-06 15:04:53.265 PhotoPicker[79426:207] Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.
2011-07-06 15:04:53.268 PhotoPicker[79426:207] Using two-stage rotation animation is not supported when rotating more than one view controller or view controllers not the window delegate
2011-07-06 15:04:56.432 PhotoPicker[79426:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x0255a919 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x026a85de objc_exception_throw + 47
    2   CoreFoundation                      0x02554571 -[__NSArrayM insertObject:atIndex:] + 225
    3   CoreFoundation                      0x0254f9c4 -[__NSArrayM addObject:] + 68
    4   PhotoPicker                         0x00002d93 -[MyViewController didTakePicture:] + 65
    5   PhotoPicker                         0x00004442 -[OverlayViewController imagePickerController:didFinishPickingMediaWithInfo:] + 132
    6   UIKit                               0x00481a74 -[UIImagePickerController _imagePickerDidCompleteWithInfo:] + 139
    7   PhotoLibrary                        0x0c3c3070 PLNotifyImagePickerOfImageAvailability + 1746
    8   PhotoLibrary                        0x0c3d8891 -[PLUIAlbumViewController albumView:didTapPhotoAtIndex:] + 429
    9   PhotoLibrary                        0x0c426431 -[PLAlbumView _tapGesture:] + 385
    10  UIKit                               0x0052b394 -[UIGestureRecognizer _updateGestureWithEvent:] + 727
    11  UIKit                               0x00527bf3 -[UIGestureRecognizer _delayedUpdateGesture] + 47
    12  UIKit                               0x0052c486 _UIGestureRecognizerUpdateObserver + 637
    13  UIKit                               0x0052d798 _UIGestureRecognizerUpdateGesturesFromSendEvent + 51
    14  UIKit                               0x002dbbcd -[UIWindow _sendGesturesForEvent:] + 1292
    15  UIKit                               0x002d713a -[UIWindow sendEvent:] + 105
    16  UIKit                               0x002bb1ec -[UIApplication sendEvent:] + 447
    17  UIKit                               0x002bfac4 _UIApplicationHandleEvent + 7495
    18  GraphicsServices                    0x02dc0afa PurpleEventCallback + 1578
    19  CoreFoundation                      0x0253bdc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    20  CoreFoundation                      0x0249c737 __CFRunLoopDoSource1 + 215
    21  CoreFoundation                      0x024999c3 __CFRunLoopRun + 979
    22  CoreFoundation                      0x02499280 CFRunLoopRunSpecific + 208
    23  CoreFoundation                      0x024991a1 CFRunLoopRunInMode + 97
    24  GraphicsServices                    0x02dbf2c8 GSEventRunModal + 217
    25  GraphicsServices                    0x02dbf38d GSEventRun + 115
    26  UIKit                               0x002c3b58 UIApplicationMain + 1160
    27  PhotoPicker                         0x000031f8 main + 102
    28  PhotoPicker                         0x000027bd start + 53
    29  ???                                 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
sharedlibrary apply-load-rules all
Current language:  auto; currently objective-c
(gdb) 

Upvotes: 0

Views: 738

Answers (2)

Ryan
Ryan

Reputation: 5496

I was having a strange problem where the simulator/device on iOS 4.3 was crashing randomly on selecting images from the photo library, usually with a method on PLAlbumView or PLUIAlbumViewController as the last line in the stack trace.

I was dismissing the modal photo view controller, and immediately presenting another modal view controller - thus the animation was unnecessary.The crash was not happening on iOS 5.

I thought it may have been a race condition, as per question Presenting a modal view controller immediately after dismissing another

Turns out that when I changed dismissing the VC from

[myPhotoLibrary dismissModalViewControllerAnimated:YES];

to

[myPhotoLibrary dismissModalViewControllerAnimated:NO];

the crash went away. Seems to be a bug in the framework.

Upvotes: 1

Alex Terente
Alex Terente

Reputation: 12036

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'

You try to insert nil in to an array. This you do it in [MyViewController didTakePicture:]

So before you add the object to array test if it is nil first.

Upvotes: 0

Related Questions