UIImage imageWithContentsOfFile:不在真实设备上工作

时间:2017-02-02 17:31:07

标签: ios objective-c uiimage

我正在创建一个tableView,其中包含用户选择的图库中的图片,然后我选择imagePath将其放在UIImageView上。

要在UIImageView中设置iOS图库图片, 我正在使用:

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为空。

有没有办法使用真实设备实现这一目标?

1 个答案:

答案 0 :(得分:4)

由于应用沙盒,您的应用无权查看/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向用户询问图片。