Fil*_*lip 5 ios icloud swift cloudkit
我正在将 CloudKit 添加到我的应用程序以启用 iCloud 同步。但是我的方法遇到了问题,即在私有数据库上使用执行方法执行查询。
我的方法运行良好,然后我更改了一些相关方法(只需检查 iCloud 是否可用),突然我的执行方法什么也不做。无我的意思是perform(query: )闭包中的任何内容都不会被执行。我在第一行有断点,在下一行有其他断点,但从未设法击中它们。
private static func getAppDetailsFromCloud(completion: @escaping (_ appDetails: [CloudAppDetails]?) -> Void) {
var cloudAppDetails = [CloudAppDetails]()
let privateDatabase = CKContainer.default().privateCloudDatabase
let query = CKQuery(recordType: APPID_Type, predicate: NSPredicate(format: "TRUEPREDICATE"))
privateDatabase.perform(query, inZoneWith: nil) { (records, error) in
if let error = error {
print(error)
completion(nil)
} else {
if let records = records {
for record in records {
let appId = record.object(forKey: APPID_ID_Property) as? Int
let isDeleted = record.object(forKey: APPID_ISDELETED_Property) as? Int
if let appId = appId, let isDeleted = isDeleted {
cloudAppDetails.append(CloudAppDetails(id: appId, isDeleted: isDeleted == 1))
}
}
completion(cloudAppDetails)
return
}
}
completion(nil)
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题从privateDatabase.perform一行开始,之后没有断点被击中,我的执行移动到调用这个 getAppDetailsFromCloud 的函数。没有错误...
这是我第一次实现 CloudKit,我不知道为什么上面的闭包没有任何反应。
感谢帮助。
编辑:忘了提到这个方法过去工作正常,我能够从 iCloud 获取记录。我没有对它进行任何编辑,现在它不像描述的那样工作:/
编辑 2:当我在没有附加调试器的情况下运行应用程序时,一切正常。我可以按预期同步设备之间的所有数据。当我尝试调试代码时,我再次没有从 iCloud 获得任何记录。
在这里显示的完成处理程序中,如果没有错误并且没有找到结果,执行将失败并安静退出。因此,这里可能发生两种情况:查询未运行或查询未找到任何结果。我将按顺序执行以下调查步骤:
com.apple.dev.icloud-container-environment。如果此密钥不存在,则从 xcode 构建将利用开发环境。如果设置了此键,则 xcode 的构建将访问此键指向的环境。(从 Testflight 或应用商店安装此应用程序的用户将始终使用生产环境)。.perform行上。如果查询没有在您预期的时间被调用,那么您需要更早地查看调用堆栈...谁应该调用此函数?.perform预期调用,则将 an 添加else到if let record语句中。在 else 块中放置一个断点。如果触发,则查询将运行但未找到任何记录。| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |