我创建了一个framework
在应用程序和扩展程序之间共享我的数据对象。这包括我的Core Data
数据库中的数据模型和 sqlite 文件。
我担心如果 App 和 Extension 都尝试访问这个共享的 sqlite db 会发生什么。
如果应用程序在后台对数据库进行一些更改,而扩展程序正在使用它,会出现什么问题?
在这种情况下,最佳做法是什么?
我创建了一个framework
在应用程序和扩展程序之间共享我的数据对象。这包括我的Core Data
数据库中的数据模型和 sqlite 文件。
我担心如果 App 和 Extension 都尝试访问这个共享的 sqlite db 会发生什么。
如果应用程序在后台对数据库进行一些更改,而扩展程序正在使用它,会出现什么问题?
在这种情况下,最佳做法是什么?
正如@CL 所指出的,SQLite 对此很好。但是你没有直接使用 SQLite,所以你可能需要做一些核心数据级别的工作来保持一致性。使用 iOS 应用程序和扩展程序,您有两个独立的进程可以更改数据。您的代码需要考虑到这一点。
如果您的应用程序扩展程序只显示数据(例如,“今天”扩展程序只显示应用程序中创建的数据),您可能不需要做任何特别的事情。如果您的应用程序在后台运行并在扩展程序可见时创建新数据,则扩展程序的数据可能会稍微过时。如果这很重要,您可以刷新它。但是今天的扩展通常很长时间都看不到,所以它可能不值得。在这种情况下,我会NSReadOnlyPersistentStoreOption
在设置扩展的核心数据堆栈时使用,以明确意图并防止无意更改。
如果您的应用扩展程序创建新数据或修改现有数据,您的应用程序需要意识到这一点并做出适当的响应。您将进行哪些更改将取决于扩展程序如何准确地处理共享数据。对于修改后的数据,您的应用程序可能需要调用refreshObject:mergeChanges:
任何内存中的托管对象,NO
并将其作为第二个参数。它还可能需要重做更改可能影响搜索谓词的任何提取。这将确保您获得最新的更新。对于新数据,您需要重新获取应用程序正在使用的任何数据以获取新的添加/删除。检查的好时机是应用程序何时进入前台(即何时UIApplicationWillEnterForegroundNotification
发布)。