我有一个UIImagePicker用于在我的新应用程序上提取视频。我注意到根据Crashlytics我收到了一些崩溃,当插入电影阵列时,下面的movieURL为零。
我在发布之前测试了一些视频并且似乎都很好。如上所述,自发布以来,我遇到了许多崩溃事件。
有问题的错误报告是:
Exception: NSInvalidArgumentException
*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
接收视频的实际代码如下:
-(void)imagePickerController:( UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info {
NSURL *movieURL = [info valueForKey:@"UIImagePickerControllerMediaURL"];
CompileViewController *compileViewController = [[CompileViewController alloc] init];
compileViewController.movieArray = [[NSMutableArray alloc] init];
[compileViewController.movieArray insertObject:movieURL atIndex:0];
[picker dismissViewControllerAnimated:NO completion:nil];
[self.navigationController pushViewController:compileViewController animated:NO];
}
以下是使用选择器选择视频的代码。
-(IBAction)loadVideo {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
//imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
[self presentViewController:imagePicker animated:NO completion:nil];
}
我想知道是什么导致用户为" UIImagePickerControllerMediaURL"提供了一个零结果。以及我如何解决这个问题。我已经看过尝试捕获错误,但我不认为该方法有一个。我想我可以在输入数组之前检查nil值,但我想知道为什么结果首先回到nil。
由于
答案 0 :(得分:2)
您是否正确限制UIImagePickerController的媒体选择选项?根据配置,可能无法获得您期望的结果。
您的代码假设您从字典中检索的值将存在且有效。你的运行时崩溃告诉你这不是真的。
您可以在配置UIImagePickerController的位置发布设置代码吗?特别是,您是否已经完成了验证可用性(使用isSourceTypeAvailable:和availableMediaTypesForSourceType :)等操作?
如果您要打开任何可能的路径让用户离开UIImagePickerController而不录制电影,那么就没有文件,因此没有指向它的URL(网址将为零)。
编辑 -
根据您的评论,我没有看到任何明显的问题。但是配置,电影格式和/或用户授予的访问权限可能存在问题。我会根据文档对这两个警告采取行动:
始终调用isSourceTypeAvailable:类的方法 UIImagePickerController类并尊重其返回值。决不 假设设备有一个照片库。即使设备有 库,如果库当前,此方法仍然可以返回NO 不可用。
和
[媒体类型]:但是,在设置此属性之前,请检查哪些媒体类型 可通过调用availableMediaTypesForSourceType:class来获得 方法