我有一个带有sqlite数据库的项目,并通过MagicalRecord库使用它:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:storeFileName];
在当前版本的应用程序中,我通过Transient对象使用Web服务(RPC):发送请求,将响应映射到对象并显示它。在数据库中,我只保存用户添加到收藏夹的项目。
现在我希望用AFIncrementalStore实现API调用,以便进行简单的缓存和app的离线工作。 第一个问题我如何在现有的CoreData堆栈中添加AFIncrementalStore?我试图在内存中添加商店,例如:
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator];
AFIncrementalStore *incrementalStore = (AFIncrementalStore *)[coordinator addPersistentStoreWithType:[RPCAPIIncrementalStore type] configuration:nil URL:nil options:nil error:nil];
NSError *error = nil;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
但是当我尝试从我的本地数据库中获取实体时(我不需要api调用那些实体)我的api增量存储处理请求并尝试从服务器获取此项目!
如何正确配置堆栈以实现远程数据库和本地对象的高效工作?这可能是AFIncrementalStore吗?
答案 0 :(得分:0)
这是我用来设置AFIncrementalStore的代码。应该是类似的设置:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"ShuffleModel.sqlite"];
AFIncrementalStore *incrementalStore = (AFIncrementalStore *)[[NSPersistentStoreCoordinator MR_defaultStoreCoordinator] addPersistentStoreWithType:[SFIncrementalStore type] configuration:nil URL:nil options:nil error:nil];
NSError *error = nil;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSPersistentStore MR_defaultLocalStoreUrl] options:nil error:&error]){
DDLogVerbose(@"Unresolved NSIncrementalStore error %@, %@", error, [error userInfo]);
abort();
}
不确定它是否对您有所帮助,但我能够通过使用NSMainQueueConcurrency来破解它来使其工作。它已迁移到AFNetworking 2.0,似乎工作正常。以下是代码:https://github.com/premosystems/AFIncrementalStore
请在此处查看问题:https://github.com/AFNetworking/AFIncrementalStore/issues/265