Ios RestKit-混合实体映射和对象映射

Ios RestKit-混合实体映射和对象映射,ios,core-data,restkit,Ios,Core Data,Restkit,我在iOS应用程序中使用RestKit,到目前为止,我只是使用对象映射,因为我没有将任何数据持久化到CoreData。我现在想添加一种可能性,让用户下载一些数据,并在用户没有互联网连接的情况下使用这些数据 我知道我必须为此使用实体映射,但我遇到了一个问题:如何对同一个请求使用两个不同的映射?我是说,我不明白我该怎么处理这两个案子。无论用户是决定下载数据还是只是请求显示一次,URL路径都将完全相同。我如何告诉RestKit一次将其存储在CoreData中,另一次仅使用ObjectMapping对其

我在iOS应用程序中使用RestKit,到目前为止,我只是使用对象映射,因为我没有将任何数据持久化到CoreData。我现在想添加一种可能性,让用户下载一些数据,并在用户没有互联网连接的情况下使用这些数据

我知道我必须为此使用实体映射,但我遇到了一个问题:如何对同一个请求使用两个不同的映射?我是说,我不明白我该怎么处理这两个案子。无论用户是决定下载数据还是只是请求显示一次,URL路径都将完全相同。我如何告诉RestKit一次将其存储在CoreData中,另一次仅使用ObjectMapping对其进行映射

基本上,我问的问题和这个一样:
但专门针对RestKit而不是MagicalRecords

我刚刚遇到了一个类似的问题:我需要获取一个令牌,该令牌是在我映射到核心数据的用户对象之外返回的。令牌是在JSON响应中自己发送的,所以我不确定如何提取它

最后,我使用了以下方法:

[operation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) {
    NSDictionary *dictionary     = [[NSMutableDictionary alloc] init];
    dictionary = deserializedResponseBody;
    self.token = [dictionary objectForKey:@"token"];
    return  deserializedResponseBody;
}];
JSON的格式为:

{
    “token”: “....”,
    “user”: {
        ....
    }
}

操作setWillMapDeserializedResponseBlock方法使您有机会在映射发生之前操作结果,或者获取对象映射未包含的其他数据。很好地工作。

处理这种情况的正确方法是使用不同的ManagedObjectContext。 对于持久数据,您需要一个,可以这样设置:

    // Initialize managed object store
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
objectManager.managedObjectStore = managedObjectStore;
[managedObjectStore createPersistentStoreCoordinator];
[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
然后,您可以创建第二个上下文,该上下文仅为临时上下文:

NSManagedObjectContext *newTemporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; // Choose your concurrency type, or leave it off entirely
[newTemporaryContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
newTemporaryContext.persistentStoreCoordinator = coordinator;
最后,完成后,您应该将对临时上下文的引用存储在某个位置,并根据应用程序的上下文决定使用哪个上下文