我在 CoreData Managed Object 中有一个存储为 NSData
的小图像,我需要将其作为 CKAsset
保存在 CloudKit
记录中。
我希望像这样简单地从托管对象中转换 NSData
:
myCKRecord["document"] = myCDRecord.document as! CKAsset
不幸的是,这个转换不起作用,所以我通过使用 NSData
编写一个文件并使用该文件初始化 CKAsset
来解决这个问题。
class myManagedObject: NSManagedObject {
@NSManaged var image: NSData?
@NSManaged var name: String
func createCloudKitAsset(myCDRecord : myManagedObject) -> CKRecord
let myCKRecordID = CKRecordID(recordName: myCDRecord.name)
let myCKRecord = CKRecord(recordType: "myCKType", recordID: myCKRecordID)
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let localURL = NSURL.fileURLWithPath(dirPaths.first + "/" + recordName)
let fileManager = NSFileManager.defaultManager()
fileManager.createFileAtPath(localURL.path!, contents: myCDRecord.image, attributes: nil)
myCKRecord["image"] = CKAsset(fileURL: localURL)
...
}
这样可以,但是不整洁,我还有保存CK记录后要清理的临时文件。
希望有人能告诉我一个更好的方法来做到这一点。 谢谢
最佳答案
在 Core Data 中存储大文档是不好的做法。 blob 数据类型应该只用于缩略图等小图像。
相反,您的 Core Data 实体应该通过您自己的目录方案和/或通过 URL 属性指向正确的文件。然后,您只需使用 Core Data 实体的 fileURL
参数创建 CKAsset
。要访问数据,您将使用 CKAsset
的 fileURL
,这将有所不同。
关于ios - 从 CloudKit Assets 中的 CoreData 托管对象保存 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990182/