Как инициализировать CKAsset?

У меня есть класс, который имеет CKAsset (файл изображения), который извлекает данные из CloudKit. Тем не менее, я не могу понять, как инициализировать CKAsset. У меня нет данных на момент инициализации. У класса также есть строки, но я могу использовать "" для их инициализации. Что можно использовать для инициализации CKAsset?

Вот мой класс...

class Locations: NSObject, MKAnnotation {
var title: String?
var subtitle: String?
var coordinate: CLLocationCoordinate2D
var story: String?
var image: CKAsset

override init()
{
    self.title = "Test Title"
    self.subtitle = "Test Subtitle"
    self.coordinate = CLLocationCoordinate2D.init()
    self.story = ""
    self.image = <- How do I init the CKAsset before I have the data?
}
}

2 ответа

Утро, вы найдете ответ на свой вопрос в этом коде:)

func saveLeCollection (theGlob: NSURL) {

    let container = CKContainer(identifier: "iCloud.com")
    let publicDB = container.publicCloudDatabase

    let singleLink2LinkthemALL = CKRecordID(recordName: uniqReference)
    let newRecord = CKRecord(recordType: "Collection", recordID: singleLink2LinkthemALL)
    let whistleAsset = CKAsset(fileURL: theAssetURL)
    newRecord["theAsset"] = whistleAsset


    var localChanges:[CKRecord] = []
    localChanges.append(newRecord)

    let saveRecordsOperation = CKModifyRecordsOperation(recordsToSave: localChanges, recordIDsToDelete: nil)
    saveRecordsOperation.savePolicy = .ChangedKeys
    saveRecordsOperation.perRecordCompletionBlock =  { record, error in
        if error != nil {
            self.showAlert(message: error!.localizedDescription)
            print(error!.localizedDescription)
        }
        // deal with conflicts
        // set completionHandler of wrapper operation if it's the case
    }
    saveRecordsOperation.modifyRecordsCompletionBlock = { savedRecords, deletedRecordIDs, error in
        if error != nil {
            self.showAlert(message: error!.localizedDescription)
            print(error!.localizedDescription)
        } else {
            // deal with conflictsay
            // set completionHandler of wrapper operation if it's the case

        }
    }

    publicDB.addOperation(saveRecordsOperation)


}

Во-первых, я бы сказал, что установка свойств в init(), как вы делаете, не будет работать для CKAsset, так как, пока вы не сделаете вызов и не передадите запись своему классу, вы не будете знать fileURL или имя, которое CK сохранит CKAsset файл. Тем не менее, я построил этот фреймворк, так что вам никогда не нужно иметь CKAsset в классе. Это обрабатывает все. От загрузки до кэширования и все, что вам нужно, это recordID и ключ свойства вашего ресурса. Вы используете методы непосредственно на изображении. Надеюсь это поможет. https://github.com/agibson73/AGCKImage

Другие вопросы по тегам