简体   繁体   English

保存和获取CloudKit参考

[英]Saving & Fetching CloudKit References

I'm having trouble creating with CloudKit References. 我在使用CloudKit引用创建时遇到麻烦。 Data is being saved into CloudKit but its not referencing its parent (list). 数据已保存到CloudKit中,但未引用其父级(列表)。 Don't know what i'm doing wrong, any help would be much appreciated! 不知道我在做什么错,任何帮助将不胜感激!

Saving Method 保存方式

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)
        }
    }
}

Fetch Method 提取方法

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)
        }
    }
}

Where you are creating your query to retrieve items referencing the list, should the list reference in the predicate format string be inside an array? 在创建查询以检索引用该列表的项目的地方,谓词格式字符串中的列表引用是否应在数组内? If you create the item's reference like item?.setObject(listReference, forKey: "list") , CloudKit will infer the list field to be a single CKRecord.Reference , so the query would be: 如果您创建像item?.setObject(listReference, forKey: "list")这样的item?.setObject(listReference, forKey: "list")引用,CloudKit就会将list字段推断为单个CKRecord.Reference ,因此查询将是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM