我想允许用户拍照并将此照片附加到“人物”个人资料中,该资料将存储在CoreData中。
存储此UIImage的典型方法是什么?
被修改
总的来说,每个表(“Person”)将包含一些字符串和这个UIImage。
我不希望UIImages占用太多空间,因此当用户拍摄照片时,我会将其剪裁并保存尽可能小而不会失去视觉完整性。但这是后来要弄清楚的另一种方法。
知道这些UIImages的尺寸范围是多少?我只需要每个配置文件的爆头照片。就像iPhone上的“联系人”应用程序一样,我也希望能够通过iMessage或电子邮件与其他人分享这个“人”。
因此,有关整个“人”文件是否需要
的任何建议100kb与相关数据存储在同一个表中
1mb存储在通过关系附加的单独表中,以避免不必要地加载
1mb存储在磁盘上并在Core Data中引用它
答案 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。