macos - 与应用程序扩展的核心数据并发

标签 macos cocoa core-data osx-yosemite

我正在开发一个应用扩展,需要与包含的应用共享数据。我创建了一个应用程序组,并将主应用程序的核心数据存储移动到该文件夹​​。从扩展中,我可以创建托管对象上下文并将数据保存到存储中,我还可以从包含的应用程序访问它。现在我有两个独立的应用程序访问同一核心数据存储。这对我来说听起来像是一场灾难。我的设置是否足以将数据从扩展程序发送到包含的应用程序,还是应该寻找其他方法?

最佳答案

在这种情况下,您将有两个完全独立的核心数据堆栈访问同一个持久存储文件。

假设您使用的是 SQLite,那么至少在数据完整性方面是没问题的。 Core Data 使用 SQLite 事务来保存更改,并且 SQLite 适合使用同一文件的多个进程。两个进程都不会损坏另一个进程的数据或弄乱文件。

必须保持应用程序中的数据最新。例如,如果有人在应用程序运行时使用共享扩展创建新数据。在这种情况下,您不会得到类似 NSManagedObjectContextDidSaveNotification 的内容。您需要找到自己的方法来确保获得任何新的更新。

在许多情况下,您可以使这变得几乎微不足道 - 监听 UIApplicationDidBecomeActiveNotification,它会在您的应用程序进入前台时随时发布。获取后,检查持久存储中是否有新数据并加载它。

如果你想变得更优雅一点,你可以使用类似MMWormhole的东西。用于应用程序和扩展程序之间基于文件的 IPC。然后,扩展程序可以明确通知应用程序有新数据,并且应用程序可以响应。

关于macos - 与应用程序扩展的核心数据并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981374/

相关文章:

objective-c - 如何在 Mac 操作系统上将应用程序设置为默认应用程序?

ios - 使用计算值连接核心数据对象

objective-c - CGLayerRef 仅在 OS X 10.11 (El Capitan) 中显示为空

objective-c - NSAttributeDescription,访问可选属性

php - 无法使用 404 on/bolt/bolt/users/edit/访问新安装的 bolt

ios - Cocoa:在运行时获取 Darwin 版本

macos - 在 Mac 中从脚本启动新终端时设置 PATH

xcode - 在配置设置中使用 .xcconfig 文件的路径

ios - UITableView 中的二进制数据导致高 CPU 负载和卡住

ios - 禁用 MagicalRecord 错误消息和警告