我已经制作了一个与CloudKit数据库交互的简单应用程序.基本上它只是一个日期选择器和两个按钮,第一个添加带有设置时间的新记录到数据库,第二个检索所有记录.除了所有操作都非常慢之外,这似乎工作正常.从saveRecord和performQuery获取响应大约需要10秒钟.我究竟做错了什么?以下是检索记录的代码.
@IBAction func retreiveButtonClick(sender: AnyObject) {
self.labelOutlet.text = "Waiting..."
func myHandler(results:[AnyObject]!, error:NSError!) {
if let err = error {
println("err: \(err.localizedDescription)")
} else {
self.labelOutlet.text = "Got \(results.count) results:"
for record in results {
let time = record.objectForKey("testTime") as NSDate
self.labelOutlet.text = self.labelOutlet.text + "\n\(time.description)"
}
}
}
var query = CKQuery(recordType:"TestTable", predicate:NSPredicate(value:true))
cloudDatabase.performQuery(query, inZoneWithID: nil, myHandler)
}
Run Code Online (Sandbox Code Playgroud)
我正在我的iPhone 5上测试它,它连接到本地WiFi.我注意到保存的记录在调用完成处理程序之前很久就出现在CloudKit Dashboard中(我有足够的时间来检查),所以我怀疑我在代码中做错了.
您的处理程序将在后台线程中调用.您应该在主线程上执行所有UI操作.您可以将所有myHandler代码放在一个块中,如:
func myHandler(results:[AnyObject]!, error:NSError!) {
NSOperationQueue.mainQueue().addOperationWithBlock({
// ... put here your function code.
})
}
Run Code Online (Sandbox Code Playgroud)
可能是其他代码正在主队列上执行,可能会阻止执行此代码.确保在后台队列上执行持久代码.
除此之外,您的代码没有任何问题.
归档时间: |
|
查看次数: |
1072 次 |
最近记录: |