【问题标题】:CloudKit database generates a new change token every sync - even if no changes have been madeCloudKit 数据库每次同步都会生成一个新的更改令牌 - 即使没有进行任何更改
【发布时间】:2019-05-01 14:33:33
【问题描述】:

每次我请求更改时,我的 CloudKit 数据库都会生成一个新的更改令牌 - 即使没有进行任何更改。

我很高兴发布代码,但我认为这与问题无关,我不想淹没帖子。我在一些用于调试的控制台输出下方发布,以表明我正在保存和使用令牌,但数据库在每次同步时都会发送新的令牌。如您所见,我没有更改数据库中的任何内容。作为参考,记录区不是每次都发送新令牌,只是数据库。

这是预期的行为吗?如果没有,您对为什么/如何发生这种情况有任何想法吗?

???? SyncOperation fires on Simulator, Private ????
☣️ FetchDatabaseChangesOperation fires ????
☣️ FetchDatabaseChangesOperation changeTokenUpdatedBlock
☣️ token used: <CKServerChangeToken: 0x7b04000029f0; data=AQAAAWpzvY7V>
☣️ server says: <CKServerChangeToken: 0x7b0400025330; data=AQAAAWpzvoVX>
☣️ saving token: <CKServerChangeToken: 0x7b0400001130; data=AQAAAWpzvoVX>
☣️ FetchDatabaseChangesOperation complete ???????? ⏱0.26
???? FetchRecordZoneChangesOperation no changes ????????
???? ModifyObjectsOperation - no changes ????????
???? UploadChangesOperation - no uploads ????????
???? ModifyObjectsOperation - no changes ????????
???? SyncOperation complete ???????? ⏱0.28

☁️ ???? Pull to refresh fires

???? SyncOperation fires on Simulator, Private ????
☣️ FetchDatabaseChangesOperation fires ????
☣️ FetchDatabaseChangesOperation changeTokenUpdatedBlock
☣️ token used: <CKServerChangeToken: 0x7b0400001f50; data=AQAAAWpzvoVX>
☣️ server says: <CKServerChangeToken: 0x7b0400001e90; data=AQAAAWpzvopq>
☣️ saving token: <CKServerChangeToken: 0x7b0400025350; data=AQAAAWpzvopq>
☣️ FetchDatabaseChangesOperation complete ???????? ⏱0.24
???? FetchRecordZoneChangesOperation no changes ????????
???? ModifyObjectsOperation - no changes ????????
???? UploadChangesOperation - no uploads ????????
???? ModifyObjectsOperation - no changes ????????
???? SyncOperation complete ???????? ⏱0.25

☁️ ???? Pull to refresh fires

???? SyncOperation fires on Simulator, Private ????
☣️ FetchDatabaseChangesOperation fires ????
☣️ FetchDatabaseChangesOperation changeTokenUpdatedBlock
☣️ token used: <CKServerChangeToken: 0x7b0400001f50; data=AQAAAWpzvopq>
☣️ server says: <CKServerChangeToken: 0x7b0400000d00; data=AQAAAWpzvo3P>
☣️ saving token: <CKServerChangeToken: 0x7b0400026840; data=AQAAAWpzvo3P>
☣️ FetchDatabaseChangesOperation complete ???????? ⏱0.13
???? FetchRecordZoneChangesOperation no changes ????????
???? ModifyObjectsOperation - no changes ????????
???? UploadChangesOperation - no uploads ????????
???? ModifyObjectsOperation - no changes ????????
???? SyncOperation complete ???????? ⏱0.13

编辑添加:

如果我去仪表板并获取自这些更改令牌中的任何起的区域更改,它会给我正确的响应,即没有更改:

我不明白如果没有新的更改,为什么它会生成新的令牌?

【问题讨论】:

  • 你如何获得这样好的调试输出?
  • 我的代码中充满了打印语句...我花了很多时间调试我的 cloudkit 东西,似乎值得
  • 您有可以共享的某种打印机助手功能或库吗?我总是遇到同样的问题
  • 我不知道 - 这只是我自己的代码。我有一个配置文件——只是一个结构,它有一个静态的 let logCKController: Bool,在我的 CloudKit 代码中,我只有一堆 if Configuration.logCKController { print "stuff" } 语句......

标签: ios synchronization cloudkit


【解决方案1】:

我也注意到了这一点。似乎CKDatabase 将任何获取操作视为值得出售新令牌的数据库活动。这应该没问题,因为它不会在您的应用程序中造成任何副作用。只需确保最新的令牌即使没有任何更改也能在本地持久保存。

【讨论】:

    【解决方案2】:

    你使用过 CKFetchDatabaseChangesOperation 吗?我使用 CKFetchRecordZoneChangesOperation 来识别更改并仅获取更改的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 2015-10-15
      • 2018-09-26
      • 2016-12-21
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      相关资源
      最近更新 更多