Можно ли получить значение 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 не хочет, чтобы вы знали, где изображение хранится физически в файловой системе.