ios - RestKit 只保存响应数组中的最后一项

标签 ios objective-c core-data 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 时,我只剩下数组“Morning Snack”中的最后一项,而没有获得“Breakfast”

映射:

+ (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 识别整个关系数组并保存它吗?

最佳答案

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

meal_goals 应该是一对多关系(反向)。

你的日志应该是:

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

除此之外,您显示的代码看起来是正确的。记录整个映射结果以验证内容。

关于ios - RestKit 只保存响应数组中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231407/

相关文章:

ios - 如何使用 GPUImage 框架保存电影?

iphone - 两个 UIScrollViews 得到 [__NSCFConstantString _isDecompressing] 错误

objective-c - cocoa 框架可以在其公共(public)头文件中隐藏 ivar 声明吗?

ios - Swift NSFetchRequest 按一个属性分组

ios - 保存不适用于 Swift 中的核心数据

ios - 作为设计师在 iOS 中固定与流动

ios - 使用 Swift 在 iOS 聊天应用程序中查看表情符号

iphone - Cocos2D 默认的调度间隔是多少?

c++ - 如何通过按下按钮调用第二个类的第一个类的方法?

ios - 首次启动时填写数据库核心数据的最佳方式是什么