2014-04-14 6 views
6
@interface Entity() 
    @property (assign) int searchTotalPagesAll; 
    @property (assign) int searchTotalPagesIdeas; 
@end 


@implementation Entity 
    + (NSDictionary *)JSONKeyPathsByPropertyKey { 
return @{ 
     @"Id": @"entity.id_entity", 
     @"name": @"entity.name", 
     @"coverage" : @"entity.coverage", 
     @"id_city": @"entity.Id_City", 
     @"cityName":@"entity.city", 
     @"countryName":@"entity.country", 
     @"stateName":@"entity.district", 
     @"countryCode": @"entity.countrycode", 
     @"keyword1": @"entity.key1", 
     ... etc 

에 기본 값을 설정, 어디는 기본 값을 해당 속성 (searchTotalPagesAll, searchTotalPagesIdeas)를 초기화해야합니까? 이 모델에는 이것과 다른 여러 속성이 필요한 내부 메서드가 있습니다.어떻게 초기화 방법이없는 맨틀 예부터 아이폰 OS 맨틀 모델의 서브 클래스

답변

12

JSON에서 맨틀 모델을 만들 든 만들지 않든간에 모델은 [-initWithDictionary:error:]으로 초기화됩니다. 모델 클래스에서 모델을 초기화하는 데 사용 된 값에 기본값을 추가 할 수 있습니다.

- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError *__autoreleasing *)error { 
    NSDictionary *defaults = @{ 
     @"searchTotalPagesAll" : @(10), 
     @"searchTotalPagesIdeas" : @(5) 
    }; 
    dictionaryValue = [defaults mtl_dictionaryByAddingEntriesFromDictionary:dictionaryValue]; 
    return [super initWithDictionary:dictionaryValue error:error]; 
} 
+0

: [[MyMantleModelClass ALLOC]을 초기화]가 실행되지 않습니다 [-initWithDictionary : 오류 :]. 이전 이니셜 라이저가 서로 호출하지 않고 후자를 호출하도록하려면 어떻게해야합니까? 고마워. – Donald

+0

'initWithDictionary'를 사용하지 않는다면'init'에 속성 값을 설정할 수 있습니다. –

7

init 메소드에서 기본값을 설정할 수 있습니다. 나는 이런 식으로 초기화하면

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     self.searchTotalPagesAll = 1; 
     self.searchTotalPagesIdeas = 2; 
    } 
    return self; 
} 
+1

의미가 있으며 허용되는 대답의 접근 방식보다 간단합니다. – ZeMoon