【问题标题】:How to keep database changes in-memory before storing them to file on save call?如何将数据库更改保存在内存中,然后再将它们存储到保存调用的文件中?
【发布时间】:2013-10-21 17:15:31
【问题描述】:

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

我认为执行 db 文件写入的调用是:

[managedObjectContext MR_saveToPersistentStoreAndWait];

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

编辑:刚刚在 Magical Record 中找到方法:

[NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];

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

[NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:objectModelName];

不会丢失任何数据。

有人知道怎么做吗?!非常感谢任何形式的帮助!

【问题讨论】:

标签: objective-c macos core-data magicalrecord


【解决方案1】:

检查这些选项:

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

2-可以在后台保存:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){

}];

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

[NSManagedObjectContext MR_defaultContext];

[NSManagedObjectContext MR_contextForCurrentThread];

【讨论】:

    【解决方案2】:

    我通过认真研究发现了这一点。我需要使用

     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];
    

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多