在iOS8中在App和Extension之间共享核心数据堆栈和数据

时间:2014-11-17 18:49:11

标签: ios sqlite core-data ios8 ios8-extension

我创建了一个framework来在App和扩展程序之间共享我的数据对象。这包括数据模型和带有Core Data db。

的sqlite文件

我担心如果App和Extension都试图访问这个共享的sqlite db会发生什么。

如果应用程序在扩展程序使用时在后台对数据库进行了一些更改,可能会出现什么问题?

这种情况下的最佳做法是什么?

1 个答案:

答案 0 :(得分:4)

正如@CL所说,SQLite对此很好。但是你没有直接使用SQLite,所以你可能需要做一些核心数据级工作来保持一致性。使用iOS应用程序和扩展程序,您有两个可以更改数据的独立进程。您的代码需要考虑到这一点。

如果您的应用扩展程序仅显示数据(例如,“今天”扩展程序仅显示在应用程序中创建的数据),您可能不需要执行任何特殊操作。如果您的应用在后台运行并在扩展程序可见时创建新数据,则扩展程序的数据可能会略微过时。如果这很重要,您可以刷新它。但是今天的扩展通常很长时间都不可见,所以它可能不值得。在这种情况下,我在设置扩展的核心数据堆栈时使用NSReadOnlyPersistentStoreOption只是为了明确意图并防止意外更改。

如果您的应用扩展程序创建新数据或修改现有数据,您的应用需要了解这一点并做出相应的响应。您将做出哪些更改将取决于扩展如何处理共享数据。对于修改后的数据,您的应用程序可能需要在refreshObject:mergeChanges:作为第二个参数的任何内存中托管对象上调用NO。它也可能需要重做任何可能影响搜索谓词的提取。这将确保您获得最新的更新。对于新数据,您需要重新获取应用正在使用的任何数据以获得新的添加/删除。检查的最佳时机是应用程序到达前台(即发布UIApplicationWillEnterForegroundNotification时)。