繁体   English   中英

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

[英]Sharing a Core Data stack and data between App and Extension in iOS8

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM