我正在尝试在我的CloudKit数据库中使用CKQueryOperation
,而不是performQuery
。
两者都有效,但是当使用CKQueryOperation时,我在设备离线时没有收到错误,但我在使用performQuery
时会这样做
以下是我的performQuery
示例,数据库是我的CKDatabase
database.performQuery(q, inZoneWithID: nil) { (records:[CKRecord]?, error:NSError?) in
if error != nil {
print(error!.localizedDescription)
return
}
}
设备离线时会出现错误,允许我提示用户。错误是
The internet connection appears to be offline
但是,当我使用CKQueryOperation
let p = NSPredicate(format:"recordID IN %@", student.courses)
let q = CKQuery(recordType: String(Course), predicate: p)
let queryOperation = CKQueryOperation(query: q)
queryOperation.recordFetchedBlock = { record in
// not called without network connection - doesn't enter scope
print(record)
}
queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in
// not called without network connection - doesn't enter scope
print(cursor)
print(error)
}
database.addOperation(queryOperation)
通过连接,我收到了两种方法的数据,因此它按预期工作。
使用CKQueryOperation
时,我是如何/在哪里通知错误的?
由于
答案 0 :(得分:14)
按照惯例,我发布赏金并在接下来的一小时内找到答案或2.不确定我最初是如何错过this,但它包含了我正在寻找的答案。
所以加入这一行
queryOperation.qualityOfService = .UserInitiated
幕后的变化,我们在
中有一些不错的动作queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in
// We get an error message... Finally !!
print(error)
}
无法在Apple Docs中找到任何暗示这一点的内容。