CloudKit查询已注销的用户

时间:2014-09-26 13:41:57

标签: ios cloudkit

根据Apple的文档,未登录iCloud的用户仍然可以从公共数据库中读取,但在查询公共数据库时,我收到以下错误:

错误Domain = NSCocoaErrorDomain Code = 4097“操作无法完成。(Cocoa error 4097.)”(连接到名为com.apple.cloudd的服务)UserInfo = 0x7c3498c0 {NSDebugDescription =连接到名为com.apple的服务.cloudd}

这是我的参考代码:

let container = CKContainer.defaultContainer()
let database = container.publicCloudDatabase

let predicate = NSPredicate(value: true)
let episodeQuery = CKQuery(recordType: "Episode", predicate: predicate)
database.performQuery(episodeQuery, inZoneWithID: nil) {
    // Record handling goes here
}

任何想法,提示或建议都值得赞赏。非常感谢

3 个答案:

答案 0 :(得分:2)

当您的应用程序无法与CloudD(CloudKit守护程序)通信时,将返回错误4097。

这可能是由于权利问题或cloudd中的错误造成的。检查您的系统日志以获取更多线索,并从cloudd查找崩溃日志。如果您有cloudd的崩溃日志,请将其附加到bugreport.apple.com

的新雷达

答案 1 :(得分:0)

我有一个类似的问题 - 按照@farktronix的建议检查系统日志后,经cloudd过滤后,我看到了:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unexpected expression: NSSelfExpression'

原来我的查询谓词不正确 - 在我的订阅查询中,我试图使用谓词:

NSPredicate(format: "self = %@", someCKRecord)

而我应该一直在使用

NSPredicate(format: "recordID = %@", someCKRecord.recordID)

答案 2 :(得分:0)

如果我多次向iCloud发送请求,也会遇到类似的问题。

当我尝试做CKModifyRecordsOperation并且有超过100个recordsToSave时,这会发生在我身上。我尝试了大约3次连续进行此操作。然后我得到了这个错误。然后,每个单独的CloudKit API都会被拒绝。几分钟后,一切恢复了。

2019-01-14 20:27:19.326912+1300 inkDiary[27136:5424371] [LogFacilityCK] Got a connection error for operation 95C747D64BEA5FAC: Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.cloudd" UserInfo={NSDebugDescription=connection to service named com.apple.cloudd}
Optional(Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.cloudd" UserInfo={NSDebugDescription=connection to service named com.apple.cloudd})