문제

나는있다 UITableViewController 사용되는 위치, NIB 또는 코드를 통해 인스턴스화 된 서브 클래스. 두 경우 모두 이니셜 라이저 메소드에서 사용자 정의를하고 싶습니다. 그것은 내가 둘 다 구현해야한다는 것을 의미합니까? initWithNibName:bundle: 그리고 initWithCoder:, 그리고 각 방법이 각각의 슈퍼 이니셜 라이저를 호출할까요?

지금은 이것을 필요로하지 않지만 View Controller를 initWithStyle:? 그런 다음 동일한 동작을 복제하는 3 개의 다른 Init 메소드가 필요합니까?

이는 공통 초기 메소드를 호출하지 않는 3 개의 별도의 이니셜 라이더가 있기 때문에 지정된 초기 초기화 규칙을 위반하는 것처럼 보입니다. 아니면 3 가지 다른 인스턴트 경로를 지원하면서 공통 지정된 이니셜 라이저를 만들 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

내 혼란은 각 클래스에 단일 지정 초기화기가 있어야한다는 잘못된 믿음에 근거했습니다. 이것은 사실이 아니며 UITableViewController 3 개의 지정된 초기화기가 있습니다 (내가 알 수있는 한) :

  1. initWithStyle: 로컬로 선언했습니다
  2. initWithNibName:bundle: 상속 UIViewController
  3. initWithCoder: 입양에서 NSCoding 규약

1을 무시해야합니다 이상 서브 클래스의 하위 클래스가 어떻게 인스턴스화되는지에 따라 이들 중에 이들은 이들 중 하나입니다. 필자의 경우 클래스를 NIB에서로드하거나 NIB를 참조하여 코드를 통해 인스턴스화 할 수 있으므로 #2와 #3을 구현해야했습니다. (둘 다 사용하는 것은 드문 일이라고 생각합니다. initWithStyle: 그리고 initWithNibName:bundle: 단일 수업의 경우.)

나는 애플을 찾았다 코코아에 대한 코딩 지침 도움이 되는.

다른 팁

내부적으로

  • UitableViewController 's -initWithStyle: 슈퍼를 호출합니다 -init 그런 다음 설정하십시오 _tableViewStyle 이바.
  • uiviewController 's -init 단순히 전화 -initWithNibName:bundle: 기본 인수와 함께.
  • UitableViewController 하지 않습니다 우세하다 -initWithNibName:bundle:.

따라서 재정의하는 경우 -initWithNibName:bundle: 그 다음에 -initWithStyle: 변화도 채택 할 것입니다. 물론, 안전을 플레이하려면 (구현 세부 정보에 의존해서는 안되기 때문에) 두 가지를 무시하십시오.

(그리고 무시할 필요가 없습니다 -initWithCoder: 인스턴스를 UN/보관하지 않는 한.)

명확히하기 위해 initWithStyle:, 존재 UITableViewController문서에 게시 된 이니셜 라이저는 명시 적으로 지정된 이니셜 라이저입니다.

initWithNibName:bundle: UIViewController에서 상속되며 해당 클래스의 지정된 이니셜 라이저입니다. 따라서 코코아 가이드 라인에 따라 UITableViewController ~ 해야 하다 이 메소드를 재정의합니다 (구현하여). 그러나 이것은 지정된 이니셜 라이저로 만들지 않습니다. UITableViewController.

initWithCoder: 당신이 지적했듯이, 암시 적으로 지정된 이니셜 라이저는 NSCoding.

구현하다:

- (void) viewDidLoad

구성 요소 초기화를 수행하십시오.

뷰가 실제로 요청 될 때 초기화 만 수행 할 수 있다는 이점이 있습니다.

또는 모든 이니셜 라이더가 별도의 설정 메소드를 호출하십시오.

위의 게시물에 해당 참조 –InitWithCoder :

인터페이스 빌더를 통해 뷰 컨트롤러를 학부모에 추가 한 경우 (예 : 뷰 컨트롤러가 인터페이스 빌더의 탭 막대 컨트롤러에 연결된 경우) –initwithCoder를 재정의해야합니다.

(-initwithNibName은 프로그래밍 방식으로보기 컨트롤러를 작성할 때만 호출됩니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top