我正在开发一个应用扩展,需要与包含的应用共享数据。我创建了一个应用程序组,并将主应用程序的核心数据存储移动到该文件夹。从扩展中,我可以创建托管对象上下文并将数据保存到存储中,我还可以从包含的应用程序访问它。现在我有两个独立的应用程序访问同一核心数据存储。这对我来说听起来像是一场灾难。我的设置是否足以将数据从扩展程序发送到包含的应用程序,还是应该寻找其他方法?
最佳答案
在这种情况下,您将有两个完全独立的核心数据堆栈访问同一个持久存储文件。
假设您使用的是 SQLite,那么至少在数据完整性方面是没问题的。 Core Data 使用 SQLite 事务来保存更改,并且 SQLite 适合使用同一文件的多个进程。两个进程都不会损坏另一个进程的数据或弄乱文件。
您将必须保持应用程序中的数据最新。例如,如果有人在应用程序运行时使用共享扩展创建新数据。在这种情况下,您不会得到类似 NSManagedObjectContextDidSaveNotification
的内容。您需要找到自己的方法来确保获得任何新的更新。
在许多情况下,您可以使这变得几乎微不足道 - 监听 UIApplicationDidBecomeActiveNotification
,它会在您的应用程序进入前台时随时发布。获取后,检查持久存储中是否有新数据并加载它。
如果你想变得更优雅一点,你可以使用类似MMWormhole的东西。用于应用程序和扩展程序之间基于文件的 IPC。然后,扩展程序可以明确通知应用程序有新数据,并且应用程序可以响应。
关于macos - 与应用程序扩展的核心数据并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981374/