gpt4 book ai didi

ios - CKQuery 只执行获取在应用程序启动之前创建的记录

转载 作者:行者123 更新时间:2023-11-28 14:18:04 34 4
gpt4 key购买 nike

我有我一直在开发的 iOS 和 macOS 应用程序。使用 iOS 应用程序,用户可以将数据发送到 iCloud Drive,同时使用 macOS 应用程序接收数据。以下代码行来自 macOS 应用程序。

func completionPopulateDataFromCloud(uuid: String ,completionHandler: @escaping (Bool) -> (Void)) -> Void {
DispatchQueue.global().async() {
// Start Process //
let cloudContainer = CKContainer(identifier: "whatever...")
let privateDB = cloudContainer.privateCloudDatabase
let predicate = NSPredicate(format: "uuid = %@", uuid)
let query = CKQuery(recordType: "myRecords", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
privateDB.perform(query, inZoneWith: nil) { records, error in
guard let records = records else {
completionHandler(false)
return
}

DispatchQueue.main.async() {
[weak self] in
guard let strongSelf = self else { return }

if records.count == 0 {
} else {
let record = records[0]
let recordID = record.recordID.recordName
...
...
completionHandler(true)
}
}
}
}
}

所以我只是整理了一些有日期的记录,得到最新的记录,而不是得到所有的记录。

问题是应用程序启动后不会收到已上传到 iCloud Drive 的记录。即使我等了几分钟,应用程序也不会获得最新的。如果我退出应用程序然后再次重新启动它,它将获得最新的。这就是事情应该如何运作的方式吗?我希望不是。有什么我不知道的技巧吗?谢谢。

附注我读过this topic .我认为这与我无关。

最佳答案

通常的方法是使用自定义记录区域。创建一个 CKRecordZoneSubscription 并在应用程序启动时使用 CKFetchRecordZoneChangesOperation 获取更改。处理并保存 CKServerChangeToken 以保持当前状态。

当应用程序运行时,您会收到有关更改的推送通知。

请观看有关 CloudKit 的 WWDC 视频以获取更多信息。

关于ios - CKQuery 只执行获取在应用程序启动之前创建的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058392/

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