将 CoreData 托管对象的 NSData 保存在 CloudKit 资产中
Saving NSData from CoreData Managed Object in a CloudKit Asset
我在 CoreData 托管对象中存储了一个小图像 NSData
,我需要将其保存在 CloudKit
记录中作为 CKAsset
。
我希望像这样简单地从托管对象中转换 NSData
:
myCKRecord["document"] = myCDRecord.document as! CKAsset
不幸的是,这个转换不起作用,所以我通过使用 NSData
编写一个文件并使用该文件初始化 CKAsset
.[=19= 来解决这个问题]
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 实体应该通过您自己的目录方案指向正确的文件,and/or 通过 URL 属性。然后,您只需使用来自核心数据实体的 fileURL
参数创建 CKAsset
。要访问数据,您将使用 CKAsset
的 fileURL
,这将有所不同。
我在 CoreData 托管对象中存储了一个小图像 NSData
,我需要将其保存在 CloudKit
记录中作为 CKAsset
。
我希望像这样简单地从托管对象中转换 NSData
:
myCKRecord["document"] = myCDRecord.document as! CKAsset
不幸的是,这个转换不起作用,所以我通过使用 NSData
编写一个文件并使用该文件初始化 CKAsset
.[=19= 来解决这个问题]
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 实体应该通过您自己的目录方案指向正确的文件,and/or 通过 URL 属性。然后,您只需使用来自核心数据实体的 fileURL
参数创建 CKAsset
。要访问数据,您将使用 CKAsset
的 fileURL
,这将有所不同。