【问题标题】:Is [NSManagedObjectContext save] an atomic commit when using an underlying SQLite DB?[NSManagedObjectContext save] 是使用底层 SQLite DB 时的原子提交吗?
【发布时间】:2012-09-28 22:11:45
【问题描述】:

或者可能是 Core Data 将保存操作拆分为几个连续的原子步骤?对于我的工作,我必须确保在崩溃后重新访问数据库时,要么所有内容都已保存,要么我已回滚到保存操作之前的状态。我一定不会有一些修改后的 NSObject 被保存但有些没有的情况。

注意:我正在使用以下 SQLite pragma 选项(是否需要任何其他选项来确保原子性?):

[pragmaOptions setObject:@"FULL" forKey:@"synchronous"];
[pragmaOptions setObject:@"1" forKey:@"fullfsync"];
[pragmaOptions setObject:@"WAL" forKey:@"journal_mode"];

【问题讨论】:

  • 你知道当你将-com.apple.CoreData.SQLDebug 1 作为参数传递给可执行文件(编辑方案 -> 参数选项卡)时,你可以在控制台中看到 SQL 语句吗?
  • 谢谢,这很有用!用两个修改后的对象保存后检查日志显示这些是原子提交的。让我们希望即使对几十个修改过的对象也是一样的。

标签: objective-c ios macos sqlite core-data


【解决方案1】:

是的,Core Data 的 -save 是事务性的。要么一切都得救了,要么什么都没有。无论您使用哪个商店都是如此。

【讨论】:

  • 文档中是否引用了此内容?我找不到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多