gpt4 book ai didi

ios - 使用 JSONModel 序列化自定义对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:58:19 24 4
gpt4 key购买 nike

我尝试使用适用于 iOS 的 JSONModel 框架从我的自定义对象创建一个 JSON 文件。我收到错误:

-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerData)

registerBuyerData.h

@interface RegisterBuyerData : JSONModel


@property (nonatomic, strong) NSString *buyerDataID;
@property (nonatomic ) RegisterBuyerDataType type;
@property (nonatomic, strong) NSString<Optional> *title;
@property (nonatomic ) BOOL required;
@property (nonatomic, strong) NSString *value;
@property (nonatomic) NSNumber<Optional> *price;
@property (nonatomic) NSNumber<Optional> *availability;

@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields; //array of more RegisterBuyerData
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*> *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray *parentValue;
@property (nonatomic, strong) NSArray<RegisterBuyerData*> *children; //array of more RegisterBuyerData but only for special selected value of an options field

- (BOOL) isAvailableForUser;

@end

注册买家数据.m

@implementation RegisterBuyerData

- (BOOL) isAvailableForUser{

return (!_availability || [_availability integerValue] > 0 );
}


+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{@"id": @"buyerDataID",@"value": @"value"}];
}

@end

RegisterBuyerDataOption.h

@interface RegisterBuyerDataOption : JSONModel

@property (nonatomic, strong) NSString *key;
@property (nonatomic, strong) NSString *value;
@property (nonatomic, strong) NSNumber *price;
@property (nonatomic, strong) NSNumber *availability;

- (BOOL) isAvailableForUser;

@end

难道不能递归地创建一个 JSON 字符串吗?当我调用 toJSONString 方法时,我得到了这些错误。

最佳答案

@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields;

应该是

@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields;

所以去掉多余的 * 并重试。

编辑:

哦,我明白了。似乎您还没有将要级联的类型声明为协议(protocol)。所以执行以下操作

RegisterBuyerDataOption.h

@protocol RegisterBuyerDataOption @end;

@interface RegisterBuyerDataOption : JSONModel

@property (nonatomic, strong) NSString *key;
@property (nonatomic, strong) NSString *value;
@property (nonatomic, strong) NSNumber *price;
@property (nonatomic, strong) NSNumber *availability;

- (BOOL) isAvailableForUser;

@end

registerBuyerData.h

@protocol RegisterBuyerData @end;

@interface RegisterBuyerData : JSONModel


@property (nonatomic, strong) NSString *buyerDataID;
@property (nonatomic ) RegisterBuyerDataType type;
@property (nonatomic, strong) NSString<Optional> *title;
@property (nonatomic ) BOOL required;
@property (nonatomic, strong) NSString *value;
@property (nonatomic) NSNumber<Optional> *price;
@property (nonatomic) NSNumber<Optional> *availability;

@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields; //array of more RegisterBuyerData
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*> *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray *parentValue;
@property (nonatomic, strong) NSArray<RegisterBuyerData*> *children; //array of more RegisterBuyerData but only for special selected value of an options field

- (BOOL) isAvailableForUser;

@end

关于ios - 使用 JSONModel 序列化自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041651/

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