init가 실행되지 않았을 때viewDidLoad 방법으로 해결 (시퀀스)

1682 단어
2017년 5월 5일 1.init가 실행되지 않았을 때viewDidLoad 방법을 호출합니다.문제:viewDidLoad 방법의 변수는 init 방법의 대상을 초기화해야 합니다. init 대상이 실행되지 않았기 때문에viewDidLoad가 정상적으로 실행되지 않습니다.
2. 원인 분석:viewDidLoad는 정상적으로 init 이후에 실행된 것이다. init 방법에서view 설정과 관련된 속성을 호출했기 때문에viewDidLoad를 일찍 실행했다.
3. 해결 방법:view 관련 설정 속성을 모두 init에서 마지막으로 실행하거나viewDidLoad에서 직접 설정해도 됩니다.참조:http://stackoverflow.com/questions/31489957/viewdidload-is-called-before-whole-init-method-is-executed
4.1 문제 코드:
- (id)initWithReqData:(HuExerciseReqParamModel*)model withType:(HuExamType)examType
{
    self = [super init];
    if (self) {
        self.view.backgroundColor = page_bgcolor;
    }
    return self;
}

// 
- (id)initWithReqData:(HuExerciseReqParamModel*)model andDBCache:(NSDictionary*)allDataDic withType:(HuExamType)examType
{
    self = [self initWithReqData:model withType:examType];
    if (self) {
        self.allDataDic = allDataDic;
    }
    return self;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self intViewAndData];
}

4.2 수정 후 코드:
- (id)initWithReqData:(HuExerciseReqParamModel*)model withType:(HuExamType)examType
{
    self = [super init];
    if (self) {
    }
    return self;
}
// 
- (id)initWithReqData:(HuExerciseReqParamModel*)model andDBCache:(NSDictionary*)allDataDic withType:(HuExamType)examType
{
    self = [self initWithReqData:model withType:examType];
    if (self) {
        self.allDataDic = allDataDic;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = page_bgcolor;
    [self intViewAndData];
}

만약 이 글이 당신에게 도움이 된다는 것을 발견한다면, 다른 사람들도 이익을 얻을 수 있다고 생각한다면, 그것을 공유해 주십시오.

좋은 웹페이지 즐겨찾기