当用户从选择器控制器中选择一个图像时,我正在调用该委托:
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
在字典信息中,键UIImagePickerControllerMediaURL
的值为NULL
。我在这里错过了什么吗?
答案 0 :(得分:5)
我知道这个问题非常古老,但我确实设法从最近的谷歌搜索中徘徊,所以我想我会想到我认为实际上是你的问题的答案,其他答案似乎都错过了。
您为UIImagePickerControllerMediaURL获取NULL,因为它仅在选择器中为Movie(kUTTypeMovie)媒体类型返回。如果您在创建默认选择器时没有指定其他媒体类型,那么文档似乎意味着您将无法获得它:
“UIImagePickerControllerMediaURL - Specifies the filesystem URL for the movie.”
我可以确认至少在iOS 6中为图像(而非电影)进行的快速测试中没有返回。
要访问返回的图像,您实际上可以在UIImagePickerControllerOriginalImage(如果不允许编辑,默认设置)或UIImagePickerControllerEditedImage的键下直接访问UIImage对象,如果在选择器中允许编辑。即使在选取器中进行了编辑,原始图像也始终可用。您可以像处理程序中的任何其他UIImage一样对待这些UIImage。
答案 1 :(得分:3)
您可以获得该对象的NSURL路径,但这并不是您所期望的。我似乎也无法访问文件中的数据。
- (void)imagePickerController:(UIImagePickerController *)imagepicker didFinishPickingMediaWithInfo:(NSDictionary *)info {
// dismiss the image picker modal
[[imagepicker parentViewController] dismissModalViewControllerAnimated:YES];
// grab the image url
NSURL *imageURL = [info valueForKey: UIImagePickerControllerReferenceURL];
// get the data from the url
NSData *data = [NSData dataWithContentsOfURL:imageURL];
// data is null at this point
}
对于jpeg文件,NSURL看起来类似于以下内容。
资产库://asset/asset.JPG ID = 1000000246&安培; EXT = JPG
答案 2 :(得分:0)
是的,元数据没有填充在回调中(有些人还期望拍摄照片的地方的地理标记/位置,但事实并非如此)。 从Apple的角度来看,你没有获得NSURL听起来是合乎逻辑的:他们不会给你真实文件的路径(比如file:// ....),因为这被认为是实现的一部分,而不是公共API的一部分:从客户端的角度来看,如果苹果公司不希望您知道图片在文件系统中的实际存储位置,那就好像。
答案 3 :(得分:0)
在iPad上运行iOS 3.2.1,似乎我的应用程序能够通过UIImagePickerControllerMediaURL
获取图像文件的文件URL,即使文档似乎说它只适用于电影文件。 / p>
答案 4 :(得分:0)
以下链接对我有所帮助。 display image from URL retrieved from ALAsset in iPhone
UIImagePickerControllerReferenceURL
返回资产库网址。您需要使用ALAssetLibrary对象来访问图像。该链接描述了如何执行此操作。