Сохранение и получение ссылок на CloudKit - PullRequest
0 голосов
/ 10 октября 2018

У меня проблемы с созданием ссылок из CloudKit.Данные сохраняются в CloudKit, но не ссылаются на своего родителя (список).Не знаю, что я делаю неправильно, любая помощь будет высоко ценится!

Метод экономии

var list: CKRecord?
var item: CKRecord?    

@objc func save() {
    let name = nameTextField.text! as NSString

    //Fetch Private Database
    let privateDatabase = CKContainer.default().privateCloudDatabase

    if item == nil {
        //Create Record
        item = CKRecord(recordType: RecordTypeItems)

        //Initialization Reference
        guard let recordID = list?.recordID else { return }
        let listReference = CKRecord.Reference(recordID: recordID, action: .deleteSelf)

        item?.setObject(listReference, forKey: "list")
    }

    item?.setObject(name, forKey: "name")

    //Save Record
    privateDatabase.save(item!) { (record, error) in
        DispatchQueue.main.sync {
            self.processResponse(record: record, error: error)
        }
    }
}

Метод выборки

var list: CKRecord!
var items = [CKRecord]()

private func fetchItems() {
    //Fetch Private Database
    let privateDatabase = CKContainer.default().privateCloudDatabase

    //Initialize Query
    guard let recordID = list?.recordID else { return }
    let reference = CKRecord.Reference(recordID: recordID, action: .deleteSelf)
    let query = CKQuery(recordType: RecordTypeItems, predicate: NSPredicate(format: "list == %@", [reference]))


    //Configure Query
    query.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]

    //Peform Query
    privateDatabase.perform(query, inZoneWith: nil) { (records, error) in
        DispatchQueue.main.sync {
            self.processResponseForQuery(records: records, error: error)
        }
    }
}

1 Ответ

0 голосов
/ 11 октября 2018

Где вы создаете свой запрос для получения элементов, ссылающихся на список, должна ли ссылка на список в строке формата предиката находиться внутри массива?Если вы создадите ссылку на элемент, такую ​​как item?.setObject(listReference, forKey: "list"), CloudKit выведет поле list как одно CKRecord.Reference, поэтому запрос будет:

let query = CKQuery(recordType: RecordTypeItems, predicate: NSPredicate(format: "list == %@", reference))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...