gpt4 book ai didi

ios - 使用 Core Data + iCloud 同步时在应用程序和 Today 小部件之间共享数据的正确方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:02:36 25 4
gpt4 key购买 nike

我有一个带有 Today 小部件扩展的应用程序。我需要应用程序、小部件以及其他设备上的应用程序和小部件的其他实例来共享数据,所以我正在使用 iCloud 核心数据集成。起初,我让应用程序和小部件(在单个设备中)在共享容器目录中共享相同的核心数据存储 (sqlite)。现在我已经启用了 iCloud 同步,这在设备之间工作,但现在我在同一设备上的应用程序和小部件之间显示的数据不一致(?!?)。问题可能出在我的小部件 GUI 更新周期或通知中心订阅上,我仍在排除故障,但在我这样做时:

当您使用 Core Data + iCloud 时,在同一台设备上的一个应用程序和一个小部件(或者我想是两个应用程序)之间共享来自 Core Data 的数据的“正确”解决方案是什么?他们应该共享一家实体店,还是应该各自拥有自己的商店?如果两种方法都有效,是否存在问题?

最佳答案

您应该考虑的第一个问题是您是否真的需要与您的扩展共享整个 Core Data 存储。如果仅共享少量数据是可能的,也许通过 plist,这将使事情变得更加简单。

假设这不是一个选项,并且您确实需要整个商店,您有两个选择:

  1. 在共享容器中共享单个商店
  2. 采用 Core Data 同步解决方案,并为您的主要应用和扩展程序提供单独的商店。

可以在两个单独的进程之间共享一个存储,但是有一些陷阱。如果一个进程保存,第二个进程中的任何 NSManagedObjectContext 都不会注册更改,这意味着数据不会在 UI 中更新,也可能导致稍后保存失败。

要解决这个问题,您必须找到一种方法将已更改对象的对象 ID 从一个进程传递到另一个进程,以便接收进程可以刷新对象并重新获取最新数据。

第二个选项涉及两个独立的商店,以及一种传输更改的方法。如果你使用 iCloud + Core Data,iCloud 就是传输机制,考虑到你的进程都在同一台设备上,这有点矫枉过正。

我相信 Apple 甚至警告过不要在 iOS 上使用这个解决方案,因为如果 iOS 应用程序进入后台,它可能会在文件协调器锁定文件时停止,这可能会导致死锁其他进程。

iCloud + Core Data 并不是唯一的同步解决方案。在这种情况下更好的解决方案可能是 Ensembles框架,我开发的。我这么说的原因是它可以选择通过本地文件同步,而不需要云服务。您可以为您的扩展程序和主应用程序设置单独的商店,并让 Ensembles 使用共享容器来传输变更集。没有云参与,也没有文件协调问题。

关于ios - 使用 Core Data + iCloud 同步时在应用程序和 Today 小部件之间共享数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27723718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com