首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios Mantle -正确覆盖默认initWithDictionary

ios Mantle -正确覆盖默认initWithDictionary
EN

Stack Overflow用户
提问于 2014-12-16 10:54:11
回答 1查看 1.6K关注 0票数 3

我面临以下问题..

我有门和伊特姆的课。菜单就像餐厅的菜单,有多个类别(如开胃菜、沙拉等),每个菜单都有多个相关的项目。所以Menu.h有一个名为NSArray的itemList属性。我正在尝试使用Mantle自动加载这些对象。

代码语言:javascript
复制
Menu.h

@interface Menu : MTLModel <MTLJSONSerializing>
@property (nonatomic) NSArray *itemList;
@end

代码语言:javascript
复制
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;
}

代码语言:javascript
复制
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)。有什么线索吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-16 12:16:00

如果itemList在JSON中是null,则Mantle不会调用您的转换器,因此永远不会调用Item的初始化器。

您可以通过如下更改Menu模型来指定默认值:

代码语言:javascript
复制
- (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];
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27502976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档