Можно ли получить значение NSURL в UIImagePickerController для UIImagePickerControllerMediaURL?

Когда пользователь выбирает изображение из контроллера выбора, я вызываю делегата:

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

в информации словаря значение ключа UIImagePickerControllerMediaURL является NULL, Я что-то здесь упускаю?

5 ответов

Я знаю, что этот вопрос ужасно стар, но мне все же удалось найти его в недавнем поиске в Google, поэтому я подумал, что я добавлю то, что, на мой взгляд, на самом деле является ответом на ваш вопрос, который другие ответы, похоже, упускают.

Вы получаете NULL для UIImagePickerControllerMediaURL, поскольку оно возвращается только для медиа-типа Movie (kUTTypeMovie) в средстве выбора. Если вы представляете средство выбора по умолчанию без указания дополнительных типов мультимедиа после его создания, то документы, по-видимому, подразумевают, что вы не получите его:

" UIImagePickerControllerMediaURL - указывает URL файловой системы для фильма".

И я могу подтвердить, что он не возвращается, по крайней мере, в быстром тесте, который я сделал в iOS 6 для изображений (не фильмы).

Чтобы получить доступ к возвращенному изображению, вы фактически имеете прямой доступ к объекту UIImage под ключами UIImagePickerControllerOriginalImage (если редактирование не разрешено, настройка по умолчанию) или UIImagePickerControllerEditedImage, если редактирование разрешено в средстве выбора. Исходное изображение всегда доступно, даже если редактирование было выполнено в окне выбора. Вы можете обращаться с этими UIImage так же, как с любым другим UIImage в вашей программе.

Вы можете получить 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
 }

NSURL выглядит примерно так для файла JPEG.

активы-библиотека://asset/asset.JPG ID =1000000246& вн =JPG

При запуске iOS 3.2.1 на iPad кажется, что мое приложение может получить URL файла через UIImagePickerControllerMediaURL для файлов изображений, хотя в документации, кажется, говорится, что это работает только для файлов фильмов.

Следующая ссылка помогла мне. отображать изображение с URL-адреса, полученного из ALAsset в iPhone

UIImagePickerControllerReferenceURL возвращает URL библиотеки ресурсов. Вам необходимо использовать объект ALAssetLibrary для доступа к изображению. Ссылка описывает, как это сделать.

Да, метаданные не заполняются в обратном вызове (некоторые также ожидали геотег / положение места, где был сделан снимок, но это не так). Тот факт, что вы не получаете NSURL, звучит логично с точки зрения Apple: они не дадут вам путь к реальному файлу (например, file:// ....), потому что это то, что рассматривается как часть реализации не является частью общедоступного API: с точки зрения клиента похоже, что Apple не хочет, чтобы вы знали, где изображение хранится физически в файловой системе.

Другие вопросы по тегам