gpt4 book ai didi

ios - 在 AppDelegate 中运行 CKQuery - 等待完成

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

我正在尝试使用 CloudKit 从 iCloud 检索数据。因为我只想执行一次,所以我将代码放在 AppDelegate.swift 文件的 didFinishLaunchingWithOptions 中。

我试图在主线程上运行它,因此在我获取数据之前,我的第一个 ViewController 中的代码不会被调用。

func getPeople() {
let query = CKQuery(recordType: "Person", predicate: Predicate(format: "TRUEPREDICATE", argumentArray: nil))
CKContainer.default().privateCloudDatabase.perform(query, inZoneWith: nil) { (records, error) in
if error == nil {
names.removeAll()
messages.removeAll()
pictures.removeAll()
recordIds.removeAll()

for record in records! {

names.append(record.object(forKey: "name") as! String)
messages.append(record.object(forKey: "message") as! String)
pictures.append(UIImage(data: record.object(forKey: "picture") as! NSData as Data)!)
recordIds.append(record.recordID)

}

print("done")

} else {

print(error)
print(error?.code)

}

}

}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
performSelector(onMainThread: #selector(getPeople), with: nil, waitUntilDone: true)

return true
}

但是,这似乎不起作用。 print("done") 在我的 ViewController 中的 viewDidLoad 之后被调用。我以前没有使用过多线程,我想知道如何阻止其他代码被调用,直到我的查询完成。谢谢!

最佳答案

不要等到数据加载。检索它可能需要几秒钟的时间,并且用户界面将无响应。如果它长时间没有响应,系统甚至可以终止您的应用程序。相反,请在数据到达后更新您的 View 。您可以使用NSNotificationCenter.defaultCenter().addObserver来观察数据变化。

关于ios - 在 AppDelegate 中运行 CKQuery - 等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127550/

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