我面临以下问题..
我有一个类Menu.h和Item.h.菜单就像餐馆的菜单,有多个类别(如开胃菜,沙拉等),每个菜单都有多个相关项目。所以Menu.h有一个名为itemList的NSArray属性。我正在尝试使用Mantle自动加载这些对象。
Menu.h
@interface Menu : MTLModel <MTLJSONSerializing>
@property (nonatomic) NSArray *itemList;
@end
并且
Menu.m
@implementation Menu
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
// model_property_name : json_field_name
return @{
};
}
+ (NSValueTransformer *)itemListJSONTransformer {
return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass: Item.class];
}
- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error {
self = [super initWithDictionary:dictionaryValue error:error];
if (self == nil) return nil;
return self;
}
和
Item.m
- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error {
self = [super initWithDictionary:dictionaryValue error:error];
if (self == nil) {
//DO SOMETHING WITH SELF AND RETURN A NON NIL OBJECT
return self;
}
return self;
}
我的问题如下:如果itemList为null,即来自服务器的null响应是针对itemList的,那么我想覆盖默认的initWithDictionary行为,以便从Item的构造函数中进行SOMETHING和RETURN NON NIL OBJECT。我该怎么办?令我惊讶的是,代码没有到达这个构造函数,因为当Menu.h形成时它是null。我确实指定了(NSValueTransformer)..任何线索?谢谢!
答案 0 :(得分:1)
如果JSON中itemList
为null
,则Mantle不会调用您的变换器,因此永远不会调用Item
的初始值设定项。
您可以通过更改Menu
模型来指定默认值:
- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError *__autoreleasing *)error {
// Create itemListDefault value.
NSDictionary *defaults = @{
@"itemList" : itemListDefault
};
dictionaryValue = [defaults mtl_dictionaryByAddingEntriesFromDictionary:dictionaryValue];
return [super initWithDictionary:dictionaryValue error:error];
}