iOS PhotoPicker 示例在 4.0 模拟器下崩溃

Posted

技术标签:

【中文标题】iOS PhotoPicker 示例在 4.0 模拟器下崩溃【英文标题】:iOS PhotoPicker sample crashes under 4.0 simulator 【发布时间】:2011-07-06 08:13:58 【问题描述】:

我尝试从 Apple 运行 PhotoPicker 示例,但它在 4.0 模拟器下崩溃。但它不会在 4.3 下崩溃。有人有这个问题吗? SDK 版本之间是否发生了会导致此 nil 对象问题的更改?

它死在这条线上:

// as a delegate we are being told a picture was taken
- (void)didTakePicture:(UIImage *)picture

    [self.capturedImages addObject:picture];

这是错误输出:

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) 

【问题讨论】:

对我来说没问题。你没有做任何改变? 我没有做任何改变。这就是它的奇怪之处。我解压缩并运行它。 【参考方案1】:

我遇到了一个奇怪的问题,ios 4.3 上的模拟器/设备在从照片库中选择图像时随机崩溃,通常使用 PLAlbumView 或 PLUIAlbumViewController 上的方法作为堆栈跟踪的最后一行。

我正在关闭模态照片视图控制器,并立即呈现另一个模态视图控制器 - 因此动画是不必要的。iOS 5 上没有发生崩溃。

根据问题Presenting a modal view controller immediately after dismissing another,我认为这可能是一种竞争条件

事实证明,当我改变从

解雇 VC
[myPhotoLibrary dismissModalViewControllerAnimated:YES];

[myPhotoLibrary dismissModalViewControllerAnimated:NO];

崩溃消失了。似乎是框架中的一个错误。

【讨论】:

【参考方案2】:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'

您尝试将 nil 插入到数组中。这个你在[MyViewController didTakePicture:]做吧

所以在将对象添加到数组之前先测试它是否为 nil。

【讨论】:

好吧,我认为代码(来自 Apple,而不是我)正在做这样的事情,但它在 4.3 模拟器下运行很奇怪。 zpasterack 报告说它对他有用。 ://

以上是关于iOS PhotoPicker 示例在 4.0 模拟器下崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Express 4.0 中的 Heroku socket.io 示例错误

将 UIImage 从 photopicker 传递到以前的 ViewController

开启蓝牙 4.0 LE+经典(双模)

进入 UIImagePickerController 编辑模式

iOS:访问4.0以下的OlderBluetoothDevice

Facebook iOS SDK 4.0“App Invites”在没有 iOS 通知的情况下发送