如何在保存调用时将数据库更改存储到文件之前将其保留在内存中



首先,我使用MagicalRecord来管理我的核心数据。所以现在我的数据库层工作得很好,每次发生更改时都会保存更改。例如:我正在向表添加新条目,它立即被写入存储在硬盘上的数据库文件。我想要实现的是将所有更改保存在内存中,并仅在单击"保存"命令时将它们写入数据库文件。

我认为执行数据库文件写入的调用是:

[managedObjectContext MR_saveToPersistentStoreAndWait];

因此,正如我想的那样,我可以在不调用该方法的情况下进行所有修改,然后在"保存"单击时调用该方法。但是,它仅在线程未更改时才有效。每次线程更改时,都会重置或重新创建 ManagedObjectContext,并且我丢失了所有数据。

编辑:刚刚在魔法记录中找到的方法:

[NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];

这就是我问题的第一部分所需要的。虽然,我不知道如何从这种类型的协调员更改为

[NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:objectModelName];

而不会丢失任何数据。

有谁知道如何做到这一点?!任何帮助都非常感谢!

选中以下选项:

1-有setupCoreDataStackWithInMemoryStore,如果您想在内存中运行所有内容,这可能会有所帮助。

2-您可以在后台保存:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){

}];

3-获取默认上下文或线程的上下文

[NSManagedObjectContext MR_defaultContext];

[NSManagedObjectContext MR_contextForCurrentThread];

我通过认真的研究弄清楚了。我需要使用

 NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];

在用户单击"保存"之前让我的数据"挂起",我执行以下操作:

// psc - my current persistentStoreCoordinator; urlForStore - place where I'm gonna store SQLite
[psc migratePersistentStore:[psc persistentStores][0]  toURL:urlForStore options:nil withType:NSSQLiteStoreType error:&error];

相关内容

最新更新