将设备升级到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
崩溃。
谢谢!谢谢!谢谢!
答案 0 :(得分:0)
显然,您正在从NSURL对象中提取路径,然后从该路径创建新的NSURL对象。 fileURLWithPath:由于某种原因对该路径不满意。可能是路径不符合RFC 1808,因此前一个路径调用导致videoFilePath == nil。
但是为什么要转换呢?只需使用:
NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];