3

我面临以下问题..

我有一个类 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.h的构造函数返回一个非零对象怎么办我做吗?令我惊讶的是,代码没有到达这个构造函数,因为在形成 Menu.h 时它是空的。我确实也指定了 (NSValueTransformer)。任何线索?谢谢!

4

1 回答 1

3

如果itemListnullJSON 中,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];
}
于 2014-12-16T12:16:00.343 回答