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