2014-04-26 56 views
2

我会尽力解释我是如何想的映射完成:RestKit 2级对象的映射

TOP LVL JSON对象包含玩家对象,它是Player对象 阵列,每个Player对象包含数组,我想数组中的每个对象都是Event对象(自定义对象)。

,因为现在我有Player对象的映射和我越来越充满了阵列,寿而不是Event对象(这是我想要什么),我得到NSDictionary对象。事情是,我有我的Event类的映射。我的问题是让RestKit将这些映射到数组中。 我已经尝试添加一个Event类tho我没有运气的responseDescriptors。

这里是Player对象映射

RKObjectMapping* playerMapping = [RKObjectMapping mappingForClass:[Player class]]; 
    [playerMapping addAttributeMappingsFromDictionary:@{ 
             ...more here    
              @"activeEvents" : @"activeEvents" 
                 }]; 

这里请求方法

NSURL *taskURL = [NSURL URLWithString:kAppWebApiURLPath]; 

    // Set object manager with base url 
    RKObjectManager *objectManager = [RKObjectManager sharedManager]; 
    objectManager = [RKObjectManager managerWithBaseURL:taskURL]; 
    objectManager.requestSerializationMIMEType = RKMIMETypeJSON; 

    [objectManager.HTTPClient setDefaultHeader:@"Authorization" value:kAppWebAPIKey]; 
    [objectManager.HTTPClient setDefaultHeader:@"Content-Type" value:@"application/json"]; 

RKRequestDescriptor * requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[MappingProvider inverseLoginMapping] objectClass:[LoginInfo class] rootKeyPath:nil method:RKRequestMethodPOST]; 

[objectManager addRequestDescriptor:requestDescriptor]; 

RKResponseDescriptor *playersResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider playerMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"players" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:playersResponseDescriptor]; 

NSLog(@"%@",loginInfo.iOSDeviceToken); 
[objectManager postObject:loginInfo path:kAppWebApiLoginPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
{}... 

更新,我现在需要一个步骤映射进一步的,我的选手对象包含事件的数组,我成功映射使用

[playerMapping addRelationshipMappingWithSourceKeyPath:@"activeEvents" mapping:[MappingProvider eventMapping]]; 

但现在每个这些Eve nt对象包含一系列玩家,所以它就像玩家 - >事件 - >玩家。

下面是两个事件和球员的对象映射:

RKObjectMapping* eventMapping = [RKObjectMapping mappingForClass:[Event class]]; 

    [eventMapping addAttributeMappingsFromDictionary:@{ 

       @"stuffhere" : @"stuffz"        
                 }]; 


    RKObjectMapping* playerMapping = [RKObjectMapping mappingForClass:[Player class]]; 
    [playerMapping addAttributeMappingsFromDictionary:@{ 
                 @"name": @"name", 
                 @"activeEvents" : @"activeEvents" 
                 }]; 
    [eventMapping addRelationshipMappingWithSourceKeyPath:@"activeEvents/players" mapping:playerMapping]; 

现在我没有得到一个递归函数,但我怎么在代码中陈述,使JSON阵列的这种关系 映射分配给我的本地数组属性?

回答

0

从映射删除@"activeEvents" : @"activeEvents"并将其替换为:

[playerMapping addRelationshipMappingWithSourceKeyPath:@"activeEvents" mapping:eventMapping]; 

你也应该只有一个响应描述,因为数据被嵌套。

+0

它给我一个Event对象,它的所有属性都是null。有任何想法吗 ?警告:映射嵌套对象失败:(空) – yogi

+0

这将表明你的'eventMapping'是错误的。你需要显示它和JSON ... – Wain

+0

是的,我有点偏离。修复它,并得到它运行:),thx的家伙。派对上的派对:P – yogi