Max*_*r89 17
你不应该将大数据保存在核心数据中,Apple工程师在上一届WWDC上告诉我这个小技巧:
您可以使用"允许外部存储"属性:

据我所知,通过这样做,您的图像将存储在文件系统中的某个位置,并且内部核心数据将保存到文件系统中图片的链接.每次你要求图片时,核心数据都会自动从文件系统中检索图像.
要将图像保存为NSData,您可以执行以下操作:
let image = UIImage(named: "YourImage")
let imageData = NSData(data: UIImageJPEGRepresentation(image, 1.0))
managedObject?.setValue(imageData, forKey: "YourKey")
Run Code Online (Sandbox Code Playgroud)
请记住,UIImageJPEGRepresentatio中的1.0意味着您使用最佳质量,因此图像将变得庞大而沉重:
生成的JPEG图像的质量,表示为0.0到1.0之间的值.值0.0表示最大压缩(或最低质量),而值1.0表示最小压缩(或最佳质量).
核心数据并不意味着保存像图像这样的大二进制文件.请改用文件系统中的文档目录.
以下是实现此目的的示例代码.
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
// self.fileName is whatever the filename that you need to append to base directory here.
let path = documentsDirectory.stringByAppendingPathComponent(self.fileName)
let success = data.writeToFile(path, atomically: true)
if !success { // handle error }
Run Code Online (Sandbox Code Playgroud)
建议将filename部分内容保存到核心数据以及与该图像关联的其他元数据,并在每次需要时从文件系统中检索.
编辑:还要注意,从ios8开始,持久化的完整文件URL无效,因为沙盒app-id是动态生成的.您需要documentsDirectory根据需要动态获取.
| 归档时间: |
|
| 查看次数: |
10026 次 |
| 最近记录: |