2014-04-22 38 views
0

我发出一个请求来获取嵌套数据数组的对象。但是,RestKit只保存嵌套数据数组中的最后一项。RestKit只保存响应数组中的最后一项

例如,这里的JSON响应服务器提供

{ 
    "nutrition_day": { 
     "id": "5342e9e13138610012420100", 
     "start_on": "2014-04-07", 
     "meal_goals": [ 
      { 
       "id": "5342e9e13138610012410100", 
       "name": "Breakfast", 
       "food_entries": [ 
        { 
         "id": "535429513663320008210000", 
         "consumed_on": "2014-04-20", 
         "food_id": 33801, 
         "serving_id": 29457, 
        } 
       ] 
      }, 
      { 
       "id": "5342e9e13138610012430100", 
       "name": "Morning Snack", 
       "food_entries": [] 
      } 
     ] 
    } 
} 

但是,使用下面的代码,当我试图访问nutrition_data.meal_goals,我只剩数组中的最后一个项目“上午茶”和我没有得到 “早餐”

映射:

+ (void)mapping 
{ 
    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
    RKEntityMapping *responseMapping = [RKEntityMapping mappingForEntityForName:@"NutritionDay" inManagedObjectStore:[[RKObjectManager sharedManager] managedObjectStore]]; 

    [requestMapping addAttributeMappingsFromArray:@[@"date"]]; 

    [responseMapping addAttributeMappingsFromArray:@[@"start_on", @"protein_target"]]; 
    [responseMapping setIdentificationAttributes:@[@"start_on"]]; 
    [responseMapping addRelationshipMappingWithSourceKeyPath:@"meal_goals" mapping:[MealGoal responseMapping]]; 

    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping 
                        objectClass:[NutritionDay class] 
                        rootKeyPath:@"nutrition_day" 
                         method:RKRequestMethodGET]; 

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping 
                          method:RKRequestMethodAny 
                         pathPattern:@"nutrition/days/:date" 
                          keyPath:@"nutrition_day" 
                         statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

    [[RKObjectManager sharedManager] addRequestDescriptor:requestDescriptor]; 
    [[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor]; 
} 

请求:

[[RKObjectManager sharedManager] getObjectsAtPath:@"nutrition/days/2014-12-12" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NutritionDay *nut = ((NutritionDay *)mappingResult.firstObject); 
    NSLog(@"%lu", (long)nut.meal_goals.count); // this always returns 1 when it should be 2 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"fail"); 
}]; 

有什么我需要做的,以便RestKit识别整个关系数组并保存它?

回答

2

我建议您应该在您的映射中包含id并将其用作识别属性。

meal_goals应该是一对多的关系(与其相反)。

你的日志应该是:

NSLog(@"%lu", (long)nut.meal_goals.count); 

除了这些东西,你展示的代码看起来是正确的。记录整个映射结果以验证内容。

相关问题