将UIImage保存为plist问题(SWIFT)

时间:2014-11-29 02:44:11

标签: swift uiimage plist

简单地说, 如果从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中恢复它!

我希望用户从他或她的相机或照片库中选择个人资料图片,并将我的应用包中的默认图片分配到他们的个人资料中,如果他们不选择自己的一个。后者给了我一些问题。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 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获得的图像进行编码。我不相信莱昂纳多的回应为此提供了解决方案。