iOS & Android

UIViewController initWithNibName, viewDidLoad 호출 순서!?

_침묵_ 2013. 1. 14. 18:02

UIViewController의 initWithNibName에서 초기값을 설정하고, setSomthing() 류의 함수를 외부로 노출하여 실제 화면에 보여지기 전에 something 값을 얻어서 화면에 반영하려고 했다.


즉, 기대하는 호출 순서는 initWithNibName -> setSomething -> viewDidLoad 가 되겠다.


하지만 실제로는 initWithNibName -> viewDidLoad -> setSomething 으로 불려지더라... -_-;


initWithNibName 안에 다음과 같은 코드가 있었는데, 크기를 구하는 것 때문에 initWithNibName 처리 중에 viewDidLoad를 호출해버리는 것 같다. 레이아웃이 이루어진 다음에 구할 수 있는 값은 viewDidLoad 안에서 사용해야 되겠다.


EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
view.delegate = self;
[self.tableView addSubview:view];
_refreshHeaderView = view;


위 코드는 initWithNibName 쪽이 아니라 viewDidLoad 쪽에 있어야 한다.