之前调用UIImagePickerController显示照相机和相册时用的一直是presentModalViewController:方法直接显示,后来发现这样的用法在New iPad上会导致:
Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘On iPad, UIImagePickerController must be presented via UIPopoverController’
这个错误,并且这个错误只出现在显示系统相册时,照相模式时不会提示这个错误。
按照错误字面意思来看,在iPad上UIImagePickerController必须通过UIPopoverController来显示,g了一下,发现提到相关问题的文章也有很多,替换的具体实现可以看下面的参考链接。可是奇怪的问题是直接presentModalViewController的方法实际测试在iPad2上面没有任何问题,关于这点我看到有老外提到说这个可能是UIKit的bug?!
另外,我发现在替换了UIPopoverController的实现后,打开相册时在小框里狂托时会有极大的可能性导致crash,有时候时EXC_BAD_ACCESS,有时候Collection mutated while being enumerated,还有时候提示数组0索引位置不可用…
类似这样的crash信息:
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>" )'
调用栈中大部时候会出现PhotoLibray这个module!
纠结了一下,发现是sourceType的问题,之前一直用的是UIImagePickerControllerSourceTypeSavedPhotosAlbum,有人提到这个type就是会导致各种莫名其妙的crash,于是换成UIImagePickerControllerSourceTypePhotoLibrary就可以了,至少目前测试的几次没有出现问题,不知这是不是又是个bug!!
http://blog.csdn.net/fxj281314/article/details/6050588
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。