您可以看到RestKit如何在RKManagedObjectResponseMapperOperation
类的内部执行此操作。
这个操作有三个阶段。
第一个是将JSON字符串解析为NSDictionarys,NSArrays等。这是最简单的部分。
id parsedData = [RKMIMETypeSerialization objectFromData:data
MIMEType:RKMIMETypeJSON
error:error];
接下来,您需要运行映射操作将此数据转换为NSManagedObjects。这涉及更多一点。
__block NSError *blockError = nil;
__block RKMappingResult *mappingResult = nil;
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
operationQueue.maxConcurrentOperationCount = 1;
[[RKObjectManager sharedManager].managedObjectStore.persistentStoreManagedObjectContext performBlockAndWait:^{
请记住用您自己的映射替换此字典。密钥[NSNull null]
映射来自根的这个对象。
NSDictionary *mappings = @{[NSNull null]: [jotOfflineRequestStatus mapping]};
RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:parsedData
mappingsDictionary:mappings];
RKManagedObjectMappingOperationDataSource *dataSource = [[RKManagedObjectMappingOperationDataSource alloc]
initWithManagedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext
cache:[RKManagedObjectStore defaultStore].managedObjectCache];
dataSource.operationQueue = operationQueue;
dataSource.parentOperation = mapper;
mapper.mappingOperationDataSource = dataSource;
[mapper start];
blockError = mapper.error;
mappingResult = mapper.mappingResult;
}];
您现在需要运行已放入我们创建的operationQueue中的任务。在这个阶段,与现有NSManagedObjects的连接已经完成。
if ([operationQueue operationCount]) {
[operationQueue waitUntilAllOperationsAreFinished];
}
我知道这些解析器类。他们将字符串解析为“NSDictionary”,这是整个反序列化过程的第一部分。我需要使用一个字符串并输出映射对象的功能。换句话说,在RestKit按顺序执行的三件事中(下载响应,解析下载的字符串,映射对象),我需要的只是最后两项。 – alokoko 2012-01-16 10:10:16
嘿,我有同样的问题。我有一些JSON需要映射到我的模型(NSManagedObject)。你有没有找到解决方案? – 2012-01-21 13:10:55
@MikeBevz:我写了自己的映射器。 :-)我写了更多的细节作为对这个问题的回答。 – alokoko 2012-01-21 22:00:25