我面临以下问题..
我有门和伊特姆的课。菜单就像餐厅的菜单,有多个类别(如开胃菜、沙拉等),每个菜单都有多个相关的项目。所以Menu.h有一个名为NSArray的itemList属性。我正在尝试使用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是空的,也就是说,itemList的空响应来自服务器,那么我想要覆盖默认的initWithDictionary行为来做一些事情,然后从Item.h的构造函数中返回一个非零对象。代码并没有到达这个构造函数,这让我感到惊讶,因为它是空的,当Menu.h正在形成时。我也指定了(NSValueTransformer)。有什么线索吗?谢谢!
发布于 2014-12-16 12:16:00
如果itemList在JSON中是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];
}https://stackoverflow.com/questions/27502976
复制相似问题