首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收CKDatabaseNotification后查询更改

接收CKDatabaseNotification后查询更改
EN

Stack Overflow用户
提问于 2019-03-12 11:03:10
回答 1查看 345关注 0票数 1

我目前正在开发一个应用程序,允许用户共享事件,并同时使用多个手机登录他们的客人。我成功地设置了CKQuerySubscription并更新、删除和创建工作正常,但只在主电话上(共享事件的手机)。

我最近发现,对于一个非主用户来说,它必须从我设置的CKDatabaseNotification那里获得通知,并且当我通过CloudKit仪表板进行更改时,它可以工作,因为我正在获得远程通知。

但是,我得到的通知(CKDatabaseNotification)并没有提供任何允许我查找哪些记录更改的内容。我试着将它转换为CKNotification,就像在这个链接上建议的那样,但正如预期的那样,它失败了。

我已经设置了一个自定义区域,我的问题如下:

  • 如何获得从CKDatabaseNotification中更改的信息?
  • 我这样做对不对?我也在其他地方读到过,有些人设法通过CKQuerySubscription在共享数据库上设置订阅,只要它位于自定义区域,但我的代码告诉我订阅失败了。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-19 12:40:53

CKDatabaseNotification只会告诉你一些事情已经改变了,而不是它是什么。推荐的前进路径是使用CKFetchDatabaseChangesOperation查找哪些记录区域有更改。然后,在CKFetchRecordZoneChangesOperation中使用该操作中的记录区域ID来获取所有更改。

CloudKit快速启动指南中有更多的信息

我正在挑选下面的一些相关信息:

在应用程序启动或收到推送后,您的应用程序使用CKFetchDatabaseChangesOperation,然后CKFetchRecordZoneChangesOperation只要求服务器自上次更新以来所做的更改。 这些操作的关键是previousServerChangeToken对象,它告诉服务器应用程序最后一次与服务器对话的时间,允许服务器只返回自那时起更改的项。 首先,您的应用程序将使用CKFetchDatabaseChangesOperation来查找哪些区域发生了变化。

然后

接下来,应用程序使用一个带有您刚刚收集到的区域ID集的CKFetchRecordZoneChangesOperation对象来执行以下操作: ·创建和更新任何已更改的记录。删除不再存在的任何记录。更新区域更改标记

WWDC视频CloudKit最佳实践也讨论了这个主题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55119937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档