gpt4 book ai didi

ios - MOTIS 对象映射,使用 NSDictionary 和值 NSArray 如何指定数组元素的类型?

转载 作者:可可西里 更新时间:2023-11-01 05:28:45 25 4
gpt4 key购买 nike

我有json

{"Types":{ "food":[{"cve":"1","description":"Pizza"},{"cve":"2","description":"Restaurant"},{"cve":"3","description":"Cafe"}], "Health":[{"cve":"3","description":"Pharmacy"},{"cve":"4","description":"Hospital"}] } }

类型.h

#import <Foundation/Foundation.h>

@interface Types: NSObject
@property (nonatomic, copy) NSDictionary *types;

@end

类型.m

#import "Types.h"
#import <Motis/Motis.h>
#import "SubTipo.h"

@implementation Types
+ (NSDictionary*)mts_mapping
{
return @{@"types": mts_key(types),};
}



@end

亚型.h

#import <Foundation/Foundation.h>

@interface Subtype: NSObject
@property (nonatomic, assign) int cve;
@property (nonatomic, copy) NSString *description;
@end

亚型.m

#import "Subtype.h"
#import <Motis/Motis.h>

@implementation Subtype
+ (NSDictionary*)mts_mapping
{
return @{@"cve": mts_key(cve),
@"description": mts_key(description),
};
}

@end

反序列化

Types * values=[[Types alloc]init];
NSDictionary * jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];


[values mts_setValuesForKeysWithDictionary:jsonObject ];

我用 NSDictionary 的 NSArray 得到 NSDictionary

但我需要 NSDictionary 和 NSArray of Subtypes

我试试

+ (NSDictionary*)mts_arrayClassMapping
{
return @{mts_key(types): Subtype.class};
}

但没有成功

我怎样才能用 Motis 得到这些

最佳答案

据我所知,您的 Types 对象没有正确定义。如果您有一个类型为 NSDictionary* 的属性并且收到的 JSON 是一个字典,Motis 将不会执行任何自动转换,因为类型已经匹配(您收到的是一个字典并且你的属性是 NSDictionary 类型)。

因此,您必须按照您的 JSON 结构实现您的 Type 对象。这意味着您的Type 对象必须具有两个数组类型的属性,一个用于food,一个用于health。然后,使用 +mts_arrayClassMapping 方法,您可以将数组的内容类型指定为 Subtype

这里是实现:

// ***** Type.h file ***** //

@interface Type: NSObject

@property (nonatomic, strong) NSArray *food;
@property (nonatomic, strong) NSArray *health;

@end

// ***** Type.m file ***** //

@implementation Type

+ (NSDictionary*)mts_mapping
{
return @{@"food": mts_key(food),
@"Health": mts_key(health),
};
}

+ (NSDictionary*)mts_arrayClassMapping
{
return @{mts_key(food): Subtype.class,
mts_key(health): Subtype.class,
};
}

@end

关于Subtype的实现,你的已经是正确的了。但是,您不应使用属性名称 description,因为它已被 NSObject 使用:

// ***** Subtype.h file ***** //

@interface Subtype: NSObject

@property (nonatomic, assign) NSInteger cve;
@property (nonatomic, copy) NSString *theDescription;

@end

// ***** Subtypes.m file ***** //

@implementation Subtype

+ (NSDictionary*)mts_mapping
{
return @{@"cve": mts_key(cve),
@"description": mts_key(theDescription),
};
}

@end

最后,如上所列,您可以映射您的 JSON,但首先您必须提取键类型的“字典”,您将其映射到您的“类型”模型对象。

// Get the json data
NSDictionary * jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

// Extract the JSON dictionary of types.
NSDictionary *jsonType = [jsonObject objectForKey:@"Types"];

// Create a Type object
Type *type = [[Type alloc] init];

// Map JSON contents to the type object with Motis
[type mts_setValuesForKeysWithDictionary:jsonType];

希望这能解决您的问题。

关于ios - MOTIS 对象映射,使用 NSDictionary 和值 NSArray 如何指定数组元素的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25755310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com