2014-12-16 7 views
3

다음과 같은 문제가 있습니다.ios Mantle - 기본 initWithDictionary를 올바르게 재정의합니다.

Menu.h 및 Item.h 클래스가 있습니다. 메뉴는 레스토랑의 메뉴와 같으며 여러 카테고리 (예 : 전채, 샐러드 등)가 있으며 각 메뉴에는 여러 항목이 연결되어 있습니다. 따라서 Menu.h에는 itemList라는 NSArray 속성이 있습니다. 맨틀을 사용하여 이러한 객체를 자동으로로드하려고합니다. 서버 널 응답이 itemList에 대한 온다에서 itemList에가, 즉, null의 경우, 다음 내가 원하는 :

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; 
} 

내 질문은 다음과 같다 기본 initWithDictionary 동작을 무시하여 Item.h의 생성자에서 무제한의 OBJECT 객체를 반환합니다. 어떻게해야합니까? Menu.h가 형성 될 때 null이기 때문에 코드는이 생성자에 놀랍게 도달하지 못했습니다. (NSValueTransformer)도 지정했습니다. 감사!

+0

당신이 이러한 개체를 생성하는 데 사용하는 코드를 추가 할 수 있습니다

이 같은 Menu 모델을 변경하여 기본값을 지정할 수 있습니다? –

+0

안녕하세요 @DavidCaunt 이걸 살펴 줘서 고마워. 나는 backend rest API를 호출하여 responseObject라는 JSON 사전을 얻는다. 그런 다음 itemList로 전체 메뉴를 만들고이 코드로 링크를 추가합니다. 'self.menuList = [MTLJSONAdapter modelsOfClass : [Menu class] fromJSONArray : responseObject error : nil]; ' 여기서 menuList는 전체 메뉴 목록입니다. 레스토랑 (이 특정 응용 프로그램의 경우) –

+0

실제 json은 여기에 있습니다. www.grubble.clipr.me/api/v1/restaurant/menu/?restaurant=2 –

답변

1

itemList이 JSON의 경우 null 인 경우 맨틀은 변압기를 호출하지 않으므로 Item의 초기화 프로그램은 호출되지 않습니다.

- (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]; 
} 
+0

David 덕분에 도움이되었습니다. 맨틀에 대한 질문이 더 적습니다. 저 자신을 해결하려고 할 것입니다. 그렇지 않으면 다시 오늘 밤에 물어볼 것입니다. :) –