2017-02-02 7 views
1

Я создаю tableView, который содержит изображения из галереи, выбранной пользователем, затем я беру выбранный imagePath, чтобы разместить его на UIImageView.UIImage imageWithContentsOfFile: не работает на реальном устройстве

Чтобы установить галерею IOS изображение в UIImageView, Я использую:

NSString *imgPath = @"/var/mobile/Media/DCIM/105APPLE/IMG_5903.JPG";//Hardcoded path just for test, image actually exists on iOS device 

self.imgViewContainer.image = [UIImage imageWithContentsOfFile: imgPath]; 

Этот код, который работает на симуляторе.

Я протестировал на реальном устройстве, и я заметил, что UIImageView пуст после выполнения вышеуказанного кода.

Есть ли способ достичь этого с помощью реального устройства?

+0

Почему вы ожидаете, что этот путь будет действительным на реальном устройстве iOS? Почему это начинается с '@'? – rmaddy

+0

Извините! Это был @ из строки, вопрос отредактирован ... Я использую этот путь только для теста, существует изображение – CGR

+2

1. Действительно ли этот путь существует на реальном устройстве iOS? 2. Приложения - это песочницы и не могут читать файлы за пределами собственной песочницы на реальном устройстве. – rmaddy

ответ

3

Из-за песочницы приложения у вашего приложения нет разрешения на просмотр содержимого /var/mobile/Media (или действительно любого подкаталога /var/). Рассмотрим следующий код:

do { 
    let fileList = try FileManager.default.contentsOfDirectory(atPath: "/var/mobile/Media/DCIM/") 
} catch { 
    print(error) 
} 

contentsOfDirectory(atPath:) с сгенерирует ошибку с этими деталями:

Error Domain=NSCocoaErrorDomain Code=257 "The file “DCIM” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/var/mobile/Media/DCIM/, NSUserStringVariant=(
    Folder 
), NSUnderlyingError=0x170045700 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} 

Этот пример в Swift, но эквивалентный код Objective-C будет иметь ту же ошибку ,

Нет никакого способа обойти это (если только вы не используете устройство с взломом, работающее с вашим приложением в качестве пользователя root). Используйте UIImagePickerController, чтобы спросить у пользователя изображение.

Смежные вопросы