我也困惑了大约 4 或 5 个小时 :) 所以。您继承的 NSPersistentStore 类是远程数据存储的“表示”。
因此,为了访问远程数据并在本地保存/缓存它,您需要执行以下操作
1)创建 NSPersistentStore 的子类并设置它。
像那样:
YOURIncrementalStore *incrementalStore = [coordinator addPersistentStoreWithType:[YOURIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
where coordinator 你的主要 NSPersistentStoreCoordinator
2)然后,您需要其他 NSPersistentStoreCoordinator,它将“协调本地表示(增量存储)和外部存储的上下文”并向其提供本地存储表示(如 SQLite DB URL):
[incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]
但是不要忘记,您的新持久存储必须知道您以前的所有本地状态。所以 options dict 将是:
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES,
NSMigratePersistentStoresAutomaticallyOption:@YES }
所以,恕我直言,我以这种方式理解所有内部工作:
您从外部 API 请求一些数据。解析它,然后保存到 backingPersistentStoreCoordinator 的上下文中,然后合并到主要的上下文中。所以所有上下文的状态都是相等的。
前面的所有文本都基于使用 AFIncrementalStore 解决方法。
我用 MagicalRecord 实现 AFIncrementalStore 的代码:
- (void)addMRAndAFIS {
[MagicalRecord setupCoreDataStack];
NSURL *storeURL = [NSPersistentStore urlForStoreName:[MagicalRecord defaultStoreName]];
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator defaultStoreCoordinator];
NSError *error = nil;
NSArray *arr = coordinator.persistentStores;
AFIncrementalStore *incrementalStore = (AFIncrementalStore*)[coordinator addPersistentStoreWithType:[PTIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES,
NSMigratePersistentStoresAutomaticallyOption:@YES };
arr = coordinator.persistentStores;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
如果我们需要讨论最简单的方法,您只需要子类 NSIncrementalStore,正确设置它(就像我写的那样),解析数据,然后创建一些上下文,保存日期,然后保存并合并到父上下文。
因此,您将拥有 2 个商店和 2 个上下文,以及 1 个 StoreCoordinator。
如果我在某个地方犯了错误,请参考它。
另外,请尝试:https ://gist.github.com/stevederico/5316737