【发布时间】:2010-11-02 22:28:24
【问题描述】:
Core Data 允许您将多个持久性存储添加到单个NSPersistentStoreCoordinator(每个具有不同的配置)名称,从而将它们组合在一个NSManagedObjectContext 中。我还没有弄清楚 Core Data 如何处理多个商店的保存操作的原子性。
假设我有两家商店:
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] init];
[coordinator addPersistentStoreWithType:type configuration:@"A" URL:aURL options:nil error:NULL];
[coordinator addPersistentStoreWithType:type configuration:@"B" URL:bURL options:nil error:NULL];
NSManagedObjectContext *context = [[NSManageObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
然后是时候拯救我这样做了:
NSError *error = nil;
BOOL result = [context save:&error];
文档说明事件的顺序是:
- 保存商店 A
- 保存商店 B
如果存储 A 正确保存,但存储 B 由于某种原因无法保存怎么办?(例如,磁盘上的文件被删除,或者权限使其只读,诸如此类)。我找不到任何文档详细说明 Core Data 是否会将更改回滚到存储 A。
在我看来,对象图会处于不一致的状态(即一个存储已更新,一个未更新)对我来说似乎很奇怪,但在多个存储之间执行完全原子保存有点棘手且资源密集。真的很想在这里澄清一下,也许来自对系统有更多经验的人!
【问题讨论】: