使用swift在应用程序中存储UIImages的正确方法是什么?

时间:2015-04-22 04:53:09

标签: ios iphone swift uiimage

我想允许用户拍照并将此照片附加到“人物”个人资料中,该资料将存储在CoreData中。

存储此UIImage的典型方法是什么?

被修改

总的来说,每个表(“Person”)将包含一些字符串和这个UIImage。

我不希望UIImages占用太多空间,因此当用户拍摄照片时,我会将其剪裁并保存尽可能小而不会失去视觉完整性。但这是后来要弄清楚的另一种方法。

知道这些UIImages的尺寸范围是多少?我只需要每个配置文件的爆头照片。就像iPhone上的“联系人”应用程序一样,我也希望能够通过iMe​​ssage或电子邮件与其他人分享这个“人”。

因此,有关整个“人”文件是否需要

的任何建议
  

100kb与相关数据存储在同一个表中

     

1mb存储在通过关系附加的单独表中,以避免不必要地加载

     

1mb存储在磁盘上并在Core Data中引用它

2 个答案:

答案 0 :(得分:2)

此处的代码可帮助您将UIImage存储在document directory中,然后将document path存储到您的数据库中。

let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
    if paths.count > 0 {
        if let dirPath = paths[0] as? String {

            let writePath = dirPath.stringByAppendingPathComponent("Image2.png") 
            UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
        }
    }
}

希望这对你有所帮助。

答案 1 :(得分:1)

您可以在核心数据模型中使用Transformable类型 - 这样您就可以存储符合NSCoding的任何包含UIImage的对象。您的图像将有效地存储在数据库中,这可能对您的应用程序更方便。

为了提高性能,还有一个允许外部存储的设置。小文件,只是作为二进制文件存储在数据库中;较大的文件,将写入外部文件。这样做的好处是它对你透明。

查看此问题以获取更多详情:Storing UIImage in Core Data with the new External Storage flag