gpt4 book ai didi

iphone - UIImagePickerControllerReferenceURL 丢失

转载 作者:行者123 更新时间:2023-12-03 18:42:04 25 4
gpt4 key购买 nike

我正在尝试获取有关我在 UIImagePicker 中选择的视频的一些数据。

因此,当它进入 UIImagePicker 委托(delegate)方法(如下)时,我知道我需要使用信息字典中的 UIImagePickerControllerReferenceURL 键。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];

NSLog(@"%@",url);

[library addAssetURL:[info objectForKey:UIImagePickerControllerReferenceURL] toAlbum:@"Compedia" withCompletionBlock:^(NSError *error) {
if (error!=nil) {
NSLog(@"Big error: %@", [error description]);
}
}];
}

问题是 url 的结果为 nil。我打印了信息的描述,它看起来像这样:

Printing description of info:
{
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file://localhost/private/var/mobile/Applications/6630FBD3-1212-4ED0-BC3B-0C23AEEFB267/tmp/capture-T0x1f57e880.tmp.Ulfn5o/capturedvideo.MOV";
}

在我做了一些研究之后,我发现如果我使用 kUTTypeMovie 设置相机,它应该给我媒体和引用网址。

这就是我定义相机的方式:

cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
cameraUI.allowsEditing = YES;
cameraUI.delegate = delegate;
cameraUI.showsCameraControls = NO;
cameraUI.cameraOverlayView = [self getCustomToolBar];

我有什么遗漏吗?

谢谢

最佳答案

差点被这个搞疯了。我所看到的每个地方,每个人似乎都确信 UIImagePickerControllerReferenceURL 始终存在。

无论如何,问题是,如果您的委托(delegate)在您使用相机拍照后被调用,则 UIImagePickerControllerReferenceURL 对象将不存在,因为图像尚未保存到相机胶卷中因此没有 UIImagePickerControllerReferenceURL。仅当从相机胶卷中选择图像后调用代表时,它才会出现。

因此,我的解决方法是使用 ALAssetLibrary 将其保存到相机胶卷,然后读回 URL。

这是我的解决方案:

首先,您要检测您的 PickerController 源类型,看看它是相机还是 photosLibrary/savedPhotosAlbum。如果是相机,那么我们使用资源库的 writeImageToSavedPhotosAlbum:orientation:completionBlock: 将图像写入相机胶卷,并在完成 block 中返回图像 URL。

但是,如果它不是相机,则意味着它是 photosLibrarysavedPhotosAlbum,在这两种情况下 [info objectForKey:UIImagePickerControllerReferenceURL] 将返回一个有效的 url

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

//dismiss the imagepicker view
[self dismissViewControllerAnimated:YES completion:nil];


if( [picker sourceType] == UIImagePickerControllerSourceTypeCamera )
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
ALAssetsLibrary *library = [Utils defaultAssetsLibrary];
[library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error )
{
//here is your URL : assetURL
}];
}
else
{
//else this is valid : [info objectForKey:UIImagePickerControllerReferenceURL]];
}

}

希望有帮助。

关于iphone - UIImagePickerControllerReferenceURL 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com