问题 设备离线时CKQueryOperation不返回错误


我正在尝试使用 CKQueryOperation, 而不是 performQuery 在我的CloudKit数据库上。

两者都有效,但是当使用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 ?

谢谢


6750
2018-03-26 00:02


起源



答案:


按照惯例,我发布赏金并在接下来的一小时内找到答案或2.不确定我是如何错过的 这个 最初,但它包含我正在寻找的答案。

所以通过添加这一行

queryOperation.qualityOfService = .UserInitiated

幕后的东西改变了,我们内部有一些不错的动作

queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in
    // We get an error message... Finally !!
    print(error)
}

无法在Apple Docs中找到任何暗示这一点的内容。


12
2018-04-11 12:12



我也发现了这个操作 timeoutIntervalForResource 默认值是7天......因此,在放弃请求之前可能需要一周时间,即使它听起来很愚蠢。我把它改成了6秒钟 - Bernardo Santana
它看起来像是超时间隔 弃用,但幸运的是qualityOfSetting仍然有效。就是现在 .userInitiated 在Swift 3中。 - James Toomey


答案:


按照惯例,我发布赏金并在接下来的一小时内找到答案或2.不确定我是如何错过的 这个 最初,但它包含我正在寻找的答案。

所以通过添加这一行

queryOperation.qualityOfService = .UserInitiated

幕后的东西改变了,我们内部有一些不错的动作

queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in
    // We get an error message... Finally !!
    print(error)
}

无法在Apple Docs中找到任何暗示这一点的内容。


12
2018-04-11 12:12



我也发现了这个操作 timeoutIntervalForResource 默认值是7天......因此,在放弃请求之前可能需要一周时间,即使它听起来很愚蠢。我把它改成了6秒钟 - Bernardo Santana
它看起来像是超时间隔 弃用,但幸运的是qualityOfSetting仍然有效。就是现在 .userInitiated 在Swift 3中。 - James Toomey