我目前正在处理将使用数据库存储项目的应用程序。在iOS中存储数据时,每个人都说的第一件事就是核心数据。
但是,经过几天的教程和文档浏览后,我有一个很大的问题。
让我再解释一下架构。所以我们有一个后端,你可以添加项目,我们有iOS和Android应用程序。我正在为我们的数据库创建一个Core Data模型。 我们想要的是检查数据库是否有更新并下载。问题是我们没有使用JSON或XML,我们正在使用新的sqlite文件。
由于Core数据为数据库创建了三个文件,它们是:
核心数据是否能够取代" db.sqlite"使用新的,从服务器下载?
答案 0 :(得分:1)
考虑到更换数据库文件而不是将对象导入其中的想法非常诱人,因为非常不鼓励使用CoreData创建的sqlite数据库。你永远不应该手动触摸它,当你这样做时,你很可能最终会破坏数据库或弄乱数据。 所以不,CoreDate无法替换底层的sqlite文件。您应该使用CoreData堆栈导入数据,这就是它的设计方式。创建JSON / XML服务是最好的方法。
但是 IN THEORY 如果您能够保持数据库中存储的CD内部信息不变,则应该可以替换sqlite文件。如果您的数据库对用户是只读的, 可能 有效,但如果用户能够创建或修改记录,请立即忘记它。
首先,在更换之前,您必须拆除可能正在使用它的所有CoreData堆栈(托管对象上下文,持久性存储协调器,托管对象模型),替换文件并重新创建CoreData堆栈
db.sqlite是主数据库文件,另外两个是临时文件,Write ahead log(wal)和Shared memory(smh),所以你不需要这两个。
记住你永远绝不能改变数据库的结构,只改变其中的数据!!!
但是,如开头所述,我 不 推荐这种做法。