gpt4 book ai didi

swift - 保存和获取 CloudKit 引用

转载 作者:行者123 更新时间:2023-11-30 11:05:50 25 4
gpt4 key购买 nike

我在使用 CloudKit References 进行创建时遇到问题。数据正在保存到 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)
}
}
}

最佳答案

在创建查询来检索引用列表的项目时,谓词格式字符串中的列表引用是否应该位于数组内?如果您创建项目的引用(如 item?.setObject(listReference, forKey: "list")),CloudKit 会将 list 字段推断为单个 CKRecord。引用,因此查询将是:

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

关于swift - 保存和获取 CloudKit 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com