简单地说, 如果从UIImagePickerController(相机或照片库)中选择该图像,然后使用NSKeyedArchiver将其存储到对象的实例变量中,我可以将UIImage编码为.plist ...
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {
let selectedImage : UIImage = image
myObject.image = selectedImage
...
}
但是,我不能将UIImage编码为.plist,如果该图像是我的应用包中存在的图像并分配给这样的变量...
myObject.image = UIImage(名称:" thePNGImage")
...其中thePNGImage.png位于我的应用包中。我可以随时在我的应用程序中显示它,但我只是无法存储它并在plist中恢复它!
我希望用户从他或她的相机或照片库中选择个人资料图片,并将我的应用包中的默认图片分配到他们的个人资料中,如果他们不选择自己的一个。后者给了我一些问题。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
首先,你不需要任何plist。如果要保存用户的首选项,请使用NSUserDefaults(这是一个plist,但它是为您维护的。)
其次,您不应该将图像保存到plist中。将参考保存到图像,例如它的URL。这样,当你再次需要它时,你可以再次找到它。图像很大;网址很小。
最后,根据我理解的问题,您想知道用户是否选择了图像,如果没有,您希望将其用作默认值。 NSUserDefault可以为此包含Bool值,或者您可以使用缺少图像URL来表示“使用默认值”。
但无论如何,你肯定是正确的,你应该根据你之前保存的任何信息,在下次启动应用程序时恢复状态。什么都不会神奇地发生。如果下次启动时图像没有神奇地回来,那是因为你没有带回来。您的应用必须具有代码/逻辑才能在启动和创建界面时执行此操作。
答案 1 :(得分:0)
还有问题吗?顺便说一句,我已经证实了你的问题。这是一个解决方法:
func imageFromXcassets(name: String) -> UIImage
{
// Load image from Xcassets
let myImage = UIImage(named: name)!
// Write image to file
let imagePath = NSHomeDirectory().stringByAppendingPathComponent("Documents/test.png")
UIImagePNGRepresentation(myImage).writeToFile(imagePath, atomically: true)
// Get image from file and return
return UIImage(contentsOfFile: imagePath)!
}
给定存储在Images.xcassets中的图像的名称,该方法在首先将图像写入文件,然后从文件中读取图像后返回UIImage。现在,图像可以成功写入NSUserDefaults,就像从imagePickerController获取的图像一样。
请注意,该示例并非如此处理选项。 (我是一个乐观的人。)
以下添加
关于莱昂纳多回应的说明:
原始问题询问如何通过UIImaged(命名:String)对从Images.xcassets获得的图像进行编码。我不相信莱昂纳多的回应为此提供了解决方案。