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のコンストラクターから何かを実行し、NON NIL OBJECTを返すにはどうすればよいですか私がやる?Menu.h が形成されたときに null だったため、コードはこのコンストラクターに到達していません.. (NSValueTransformer) も指定しました..リードはありますか? ありがとう!

4

1 に答える 1

3

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];
}
于 2014-12-16T12:16:00.343 に答える