我有一个应用程序,使用核心数据与CloudKit。更改是同步在设备之间。
主要目标具有后台模式功能,并选中了“远程通知”。主要目标和小部件目标都具有相同的应用程序组,并且都具有iCloud功能,服务设置为CloudKit,容器中的相同容器已选中。
为了从小部件访问Core Data数据,我使用了CoreDataStack,如下答案所示。在WidgetKit文件中,我有一个函数,它执行获取请求并返回Int
-该请求的行数。稍后我在小部件视图中显示该行数。
但是,如果CloudKit中的Core Data数据发生更改,例如,在另一台设备上用户添加或删除了记录,则Int
可能不正确。
如何请求更新WidgetKit时间轴条目,当这种变化发生?(如果数据在另一个设备或当前设备上更改。)谢谢。
2条答案
按热度按时间tzxcd3kk1#
一个可能的解决方案是观察
NSPersistentStoreRemoteChange
通知。在您的核心数据堆栈中:
然后,您可以检测如下所述的通知:
但有一个缺点:当检测到远程更改时,此通知会被触发多次(通常是短序列)。2为了避免刷新太频繁,您可能需要使用计时器来延迟刷新。
iqih9akk2#
发生此类更改时,如何请求更新WidgetKit时间轴条目?(如果数据在另一台设备或当前设备上发生更改。
你必须重新加载小部件的时间轴。你可以从主应用目标导入
WidgetKit
。你可以在保存上下文或处理远程更改时重新加载。您可以更新所有微件
或者只选择您需要的小部件
有关Apple docs的更多信息