我正在尝试在我的应用中加载(和上传)图片(按照图片路径)。 这在我的模拟器中工作。一切都在那里工作只有当我试图在iphone上做这件事时它才行不通,我只看到空的UIImageviews。
路径的加载方式与模拟器中的相同。源于:
PHImageManager.defaultManager().requestImageDataForAsset(asset, options: nil)
{
imageData,dataUTI,orientation,info in
cell.setString(info["PHImageFileSandboxExtensionTokenKey"] as String,name:dataUTI as String)
}
加载图像时,PHImageFileSandboxExtentionTokenKey被拆分为数据和URL。 这导致模拟器为:
/Users/Twizzler/Library/Developer/CoreSimulator/Devices/3E671415-8B83-44DA-870F-19BF2BC11F8F/data/Containers/Data/Application/8872109F-3784-40EB-BEB6-4E9FDABE013D/Documents/1613945_10200645161051698_4122753901212984922_n.jpg
在iphone中:
/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG
我正在加载图像:
let image = UIImage(named: "/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG")
cell.imageView.image = image
在这种情况下我把图片网址硬编码(这是在最终应用程序中的图像数组)
我没有收到错误或堆栈跟踪。在放置断点时,我会以与模拟器相同的方式查看图像信息
正如我现在尝试加载它们的答案所建议的那样:
let image = UIImage(contentsOfFile: "/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG")
cell.imageView.image = image
这不起作用,我无法上传文件
答案 0 :(得分:0)
这不是imageNamed
的工作方式 - 正如文档所述,它会在应用程序包中查找具有给定名称的图像。试试imageWithContentsOfFile
。
答案 1 :(得分:0)
我修好了!经过一些令人费解的日子后我现在用这种方式来访问上传和
cell.imageView.image = UIImage(data: array[indexPath.row][0] as NSData)
这显示了图像。我可以将NSData保存在CoreData中并以这种方式重新加载图像。
使用以下方法减轻系统上的负担:
cellData.checked = 1
var imageData = UIImageJPEGRepresentation(cell.imageView.image, 1)
self.array.append([imageData,cellData.imageData] )
let myObj : ViewControllerImagePicker = self.parentViewController as ViewControllerImagePicker
let textfield: UILabel = myObj.amountLabel! as UILabel
textfield.text = String(self.array.count )
cell.textLabel.alpha = 1
单击单元格时会调用此代码。通过设置cellData.imageData我可以调用单元格(当点击回到集合视图时)
由于数据使用问题,我不知道我这样做的方式是正确的还是可以使用10个以上的文件。但在我的情况下,最多可选择6张图片,它就像魅力一样
答案 2 :(得分:0)
当涉及到文件,应用程序包和沙盒时,模拟器的工作方式与真实设备完全不同。
对于初学者,模拟器将允许您在应用包中写入,添加或更改文件。在真实设备上运行的iOS不允许你这样做。
您无法对应用中的任何路径进行硬编码。即使它今天或在您的设备上以测试模式运行,但这并不意味着它可以在已发布的版本上运行。即使它确实如此,也可以停止任何更新。 Apple多次改变了存储内容和手机中的路径结构。你可以写的地方。
进行捆绑调用以获取标准文件夹的路径位置。
使用资源库从照片库加载图像,或将其保存在那里。
有很多关于如何执行此操作的资源和教程。