2013-10-07 37 views
2

見我的其他問題背景:Will RestKit's dynamic mapping solve this complex JSON mapping?餵養解析數據RKMapperOperation拋出NSUnknownKeyException

由於路服務器的結構,我需要轉換成NSManagedObject S中的JSON數據,我傳遞解析JSON做直接對象映射,像這樣:

RKObjectMapping *mapping = [RKObjectMapping requestMapping]; 
[mapping addAttributeMappingsFromDictionary:@{@"id": @"id", @"name": @"name"}]; 
NSDictionary *mappingsDictionary = @{ [NSNull null]: mapping }; 
RKMapperOperation *mapper = [[RKMapperOperation alloc] 
     initWithRepresentation:dataArray mappingsDictionary:mappingsDictionary]; 
NSError *mappingError = nil; 
BOOL isMapped = [mapper execute:&mappingError]; 
if (isMapped && !mappingError) { 
    for (id thing in mapper.mappingResult.array) { 
     NSLog(@"Mapped the '%@' thing: %@", NSStringFromClass([thing class]), thing); 
    } 
} 

的NSMutableArray裏,dataArray中,看起來是這樣的:[ {id: 1, "name":"AAA"}, {id: 2, "name":"BBB"}, ...]

和代碼打印出了一些字典,但什麼我想要的是從我的數據模型類生成的Foo對象(.id &.name)。

如果我使用:

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Foo" inManagedObjectStore:store]; 

在店裏工作以及它成功的「正常」 RestKit要求,我得到的錯誤:

終止應用程序由於未捕獲的異常「NSUnknownKeyException」,原因:'[valueForUndefinedKey:]:實體(null)不是關鍵字「id」的關鍵字編碼標準。

我在做什麼錯?

UPDATE:

繼北斗星的意見,我說:

RKManagedObjectMappingOperationDataSource *mappingDS = [[RKManagedObjectMappingOperationDataSource alloc] initWithManagedObjectContext:store.mainQueueManagedObjectContext cache:store.managedObjectCache]; 
mappingDS.operationQueue = [NSOperationQueue new]; 

上面的代碼之前,然後創建映射後,並呼籲execute之前,我設置數據源,如建議:

mapper.mappingOperationDataSource = mappingDS; 

而且我得到預期的NSManagedObject s。

回答

2

映射器操作本身不知道如何創建要映射到的類的實例。實體映射是正確的,但您需要教導映射器操作如何實例化Foo對象。爲此,您需要創建一個RKManagedObjectMappingOperationDataSource並將其設置爲mappingOperationDataSource

+0

這樣做的竅門,謝謝! –