У меня есть небольшое изображение, сохраненное как NSData
в управляемом объекте CoreData, которое необходимо сохранить в записи CloudKit
как CKAsset
.Сохранение NSData из управляемого объекта CoreData в объекте 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 сохраняется.
Надеюсь, кто-то может показать мне лучший способ сделать это. Thanks
Спасибо за предложение @Mundi. Просто указывать на файл из объекта CoreData может быть немного проще, поэтому я буду смотреть на это. Однако, я думаю, что основной вопрос все еще стоит. Если бы у меня был только небольшой двоичный объект, например. миниатюрное изображение), которое хранится как «NSData» в «CoreData», есть ли способ напрямую преобразовать эти данные в «CKAsset»? Или мне еще нужно написать файл, чтобы я мог инициализировать «CKAsset» с помощью файла fileURL? – djruss70
Я отредактировал исходное сообщение, чтобы привести пример, который отражает правильное использование CoreData. – djruss70
Ответ содержится в моем ответе: ** вам нужно создать 'CKAsset', используя URL-адрес файла, это единственный способ. – Mundi