【问题标题】:Restkit 0.24.0: How to serialize objects (including to-many relationships) to JSONRestkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON
【发布时间】:2015-01-03 16:18:24
【问题描述】:

我有一个与我的 API 开发人员期望的完全不同的核心数据数据模型。 (由于应用程序的工作方式,我不能偏离这一点)

我已使用一些自定义类将 managedObjectModels 简化为所需的格式

一个转换器类,它启动并提供:(为便于阅读而简化)

  • 包含顶级对象的 generalData 类
  • 表示 GeneralData 中对多关系对象格式的 manyData 类
  • 一个 otherData 类,它也包含 generalData 类中的多个关系对象,但与 manyData 类无关。

这些是 generalData 属性:

-(NSString*) ID
-(NSString*) 名称
-(NSString*) 位置
-(NSArray*) 许多数据对象
-(NSArray*) 其他数据对象

每个 manyData 和 OtherDataObject 依次拥有一些基本属性、它们自己的 ID 和 generalData ID。

我在 generalData 类中添加了以下请求映射:

+ (RKObjectMapping *)defineRequestMapping
{
RKObjectMapping * mapping = [RKObjectMapping mappingForClass:[generalData class]];
[mapping addAttributeMappingsFromDictionary:@{
                                     @"generalID": @"generalID",
                                     @"generalName": @"generalName",
                                     @"generalPosition": @"generalPosition",
                                     @"generalManyData": @"generalManyData",
                                     @"generalOtherData": @"generalOtherData"
                                      }];

return mapping;
}

然后像这样运行它:

RKObjectMapping *requestMapping =  [[generalData defineRequestMapping] inverseMapping];
[objectManager addRequestDescriptor:[RKRequestDescriptor
                               requestDescriptorWithMapping:requestMapping objectClass:[generalData class] rootKeyPath:nil method:RKRequestMethodPOST]];

我还在 manyData 和 OtherData 类中添加了类似的 defineRequestMapping 类方法。

每次我尝试使用 Restkit 序列化 generalData 类时,我都会收到一条错误消息,告诉我它无法序列化未知的 manyData 类。如果我评论“generalManyData”和“generalOtherData”行,它可以工作并将其他 3 个属性序列化到身体。

我似乎找不到一个教程来清除我的思绪,并且此刻我对下一步该做什么感到困惑。我尝试使用关系映射,但这并没有让我更进一步。也许我忘记了什么?

【问题讨论】:

  • 听起来您在“manyData”和“otherData”类中设置的映射存在问题。如果没有看到代码,我不能说什么,但我会设置断点并确保在这些类上设置了映射,并且这些类的所有对象映射都已正确配置以启动
  • 嗯,我会调查一下。我认为我收到了 JSONWrite 错误,因为它无法遍历数组中的 manyData 对象。设置这些嵌套映射的绝对正确方法是什么?
  • 您应该真正展示每个类的接口(带有属性)和映射。目前您的属性名称和映射名称不匹配...

标签: ios objective-c json serialization restkit


【解决方案1】:

查看RKRelationshipMapping 的文档

您需要将 generalManyData 的 RKRelationshipMapping 对象嵌套在 generalObject 的映射中,以建立两个类之间的多对多关系。如果有嵌套对象,简单的字符串值将不起作用。

RKObjectMapping *generalManyMapping = [RKObjectMapping mappingForClass:[generalData class]];];


[generalManyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"generalManyData"

                           toKeyPath:@"generalManyData"

                         withMapping:@{@"propertyOne" : @"propertyOne", @"propertyTwo" : @"propertyTwo"}]];

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2013-11-20
    • 2012-04-18
    • 2013-12-19
    • 2011-12-10
    相关资源
    最近更新 更多