您可以看到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