0

将设备升级到 iOS 5,现在应用程序崩溃了。坚果...这是一个相机应用程序。录制视频。我有一个playMovie播放捕获的视频的程序。该函数需要使用指向视频文件NSURL的路径 ( ) 创建一个。NSStringNSURL创作与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

控制台消息:

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

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

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

谢谢!谢谢!谢谢!

4

1 回答 1

0

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

但为什么要进行这种转换?只需使用:

NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
于 2012-08-31T16:57:32.463 回答