为UIImagePickerController选择视频时崩溃

时间:2014-07-29 15:48:10

标签: ios objective-c ios7 uiimagepickercontroller

我有一个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。

由于

1 个答案:

答案 0 :(得分:2)

您是否正确限制UIImagePickerController的媒体选择选项?根据配置,可能无法获得您期望的结果。

您的代码假设您从字典中检索的值将存在且有效。你的运行时崩溃告诉你这不是真的。

您可以在配置UIImagePickerController的位置发布设置代码吗?特别是,您是否已经完成了验证可用性(使用isSourceTypeAvailable:和availableMediaTypesForSourceType :)等操作?

如果您要打开任何可能的路径让用户离开UIImagePickerController而不录制电影,那么就没有文件,因此没有指向它的URL(网址将为零)。

编辑 -

根据您的评论,我没有看到任何明显的问题。但是配置,电影格式和/或用户授予的访问权限可能存在问题。我会根据文档对这两个警告采取行动:

  

始终调用isSourceTypeAvailable:类的方法   UIImagePickerController类并尊重其返回值。决不   假设设备有一个照片库。即使设备有   库,如果库当前,此方法仍然可以返回NO   不可用。

  

[媒体类型]:但是,在设置此属性之前,请检查哪些媒体类型   可通过调用availableMediaTypesForSourceType:class来获得   方法