UIImage imageWithContentsOfFile:无法在真实设备上运行

Posted

技术标签:

【中文标题】UIImage imageWithContentsOfFile:无法在真实设备上运行【英文标题】:UIImage imageWithContentsOfFile: not working on real device 【发布时间】:2017-02-02 17:31:06 【问题描述】:

我正在创建一个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为空。

有没有办法使用真实设备来实现这一点?

【问题讨论】:

为什么您希望该路径在真实的 iOS 设备上有效?为什么以@开头? 对不起!这是字符串的@,问题已编辑...我使用该路径只是为了测试,图像存在 1.该路径是否真的存在于真实的 iOS 设备上? 2. 应用是沙盒,无法在真机上读取自身沙盒外的文件。 是的,它确实存在于真实设备上,但即使我管理大量图像也可以实现?或者一些代码来测试它? 【参考方案1】:

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

【讨论】:

希望我在花时间之前看到这一点:D 谢谢队友!

以上是关于UIImage imageWithContentsOfFile:无法在真实设备上运行的主要内容,如果未能解决你的问题,请参考以下文章

在另一个 UIImage 之上添加 UIImage

Swift 从两个 UIImage 并排生成单个 UIImage

将UIImage转换为NSData并在Swift中转换回UIImage?

UIImage + NSCache 与 [UIImage imageNamed:]

将 UIImage 转换为 NSData 并在 Swift 中转换回 UIImage?

设置UIImage 圆角