0

我有一个带有 sqlite 数据库的项目,并通过 MagicalRecord 库使用它:

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:storeFileName];

在当前版本的应用程序中,我通过瞬态对象使用 Web 服务 (RPC):发送请求、将响应映射到对象并显示它。在数据库中,我只保存用户添加到收藏夹的项目。

现在我想用 AFIncrementalStore 实现 API 调用,以实现应用程序的简单缓存和离线工作。第一个问题如何在现有的 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 可行吗?

4

1 回答 1

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

于 2014-08-27T01:57:02.717 回答