Mik*_*lah 9 macos cocoa 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];
Run Code Online (Sandbox Code Playgroud)
然后是时候保存我这样做:
NSError *error = nil;
BOOL result = [context save:&error];
Run Code Online (Sandbox Code Playgroud)
文档说明事件的顺序是:
如果商店A保存正确,但商店B由于某种原因无法保存怎么办?(例如,磁盘上的文件被删除,或者权限被设置为只读,那种事情).我找不到任何详细说明Core Data是否会将更改回滚到商店A的文档.
对我来说似乎很奇怪,对象图将保持不一致状态(即一个商店更新,一个没有更新),但在多个商店中执行完全原子保存有点棘手和资源密集.我真的想在这里做一些澄清,也许来自对系统有更多经验的人!
我今天终于偶然发现了答案CoreDataErrors.h.有一个错误代码:
NSPersistentStoreIncompleteSaveError = 134040, // one or more of the stores returned an error during save (stores/objects that failed will be in userInfo)
Run Code Online (Sandbox Code Playgroud)
因此,似乎Core Data不会尝试从成功的商店中回滚保存.并且确实不能跨多个商店提供原子性.很公平!
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |