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:无法在真实设备上运行的主要内容,如果未能解决你的问题,请参考以下文章
Swift 从两个 UIImage 并排生成单个 UIImage
将UIImage转换为NSData并在Swift中转换回UIImage?
UIImage + NSCache 与 [UIImage imageNamed:]