仅在IOS5上创建NSURL崩溃

时间:2012-08-30 07:56:40

标签: ios5 exc-bad-access

将设备升级到iOS 5,现在应用程序崩溃了。坚果... 这是一个相机应用程序。录制视频。我有一个playMovie程序来播放捕获的视频。该函数需要使用指向视频文件的路径(NSURL)创建NSString。但NSURL创建与exc_bad_access崩溃。 2晚试图解决这个问题,没有运气。开始怀疑问题是xcode 3.2.5的旧版本。 这是片段......

    - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    /// after I verify that file type is movie ....
    videoFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path];
    NSURL    *url    =   [NSURL fileURLWithPath:videoFilePath];
    ... at this point the app crashes. 

已经受到审判:
- 将NSURL创建从playMovie proc移至didFinishPickingMediaWithInfo内(如上所示)。仍然崩溃 - 添加isDirectory:NO]。仍然崩溃 - 在日志中打印路径字符串...路径看起来很好(它不是空的或覆盖的) - 注释掉NSURL并保存MOV文件而不播放它。工作良好。但我需要URL才能播放电影。

设备日志:

例外类型:EXC_BAD_ACCESS (SIGSEGV)

例外代码:KERN_INVALID_ADDRESS at 0x10000010

console msg:

数据格式化程序暂时不可用,将在“继续”后重试。 (找不到dlopen函数,因此无法加载共享库。)

---添加更多细节(8/30/12)---

videoFilePath是我NSString中声明的viewController.h。它有@property (retain,nonatomic),它是合成的。它没有在任何地方分配,因此它被用作常量。上面的代码段显示了如何将媒体网址分配给videoFilePath(作为常量,不分配)。
在此之后,我为用户打开UIActionSheet“播放电影”,或“保存电影”或“取消”(有一天会添加Youtube选项)。在操作表中,如果用户选择PlayMovie,我调用(void)playMovie过程。在该过程中,我声明* url对象使用videoFilePath中存储的路径启动它。在升级到IOS 5之前,它像魅力一样工作。 我只是尝试在NSString内预先分配videoFilePath (void)viewDidLoad,以便使用已分配而不是常量。但这并没有解决它 我刚尝试将XCODE升级到4.2。我不再获得msg“Data Formatters暂时不可用”了。但仍然与EXC_BAD_ACCESS崩溃。

谢谢!谢谢!谢谢!

1 个答案:

答案 0 :(得分:0)

显然,您正在从NSURL对象中提取路径,然后从该路径创建新的NSURL对象。 fileURLWithPath:由于某种原因对该路径不满意。可能是路径不符合RFC 1808,因此前一个路径调用导致videoFilePath == nil。

但是为什么要转换呢?只需使用:

NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];