2016-06-14 3 views
24

Xcode 8.0 베타 (8S128d)가 설치되었습니다. 이제 메시지가있는 경고 메시지가 표시됩니다.수퍼 클래스 awakeFromNib 호출

Method possibly missing a [super awakeFromNib] call 

모두 awakeFromNib 방법입니다. 어떤 경우에이 수퍼 클래스 메서드를 호출해야합니까?

+0

가능한 복제 [? 내가 전화를해야 \ [슈퍼로 awakeFromNib \]] (http://stackoverflow.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

답변

32

Apple 당으로 :

당신은 클래스를 부모에게 그들이 필요로 추가 초기화를 수행 할 수있는 기회를 제공하기로 awakeFromNib의 슈퍼 구현을 호출해야합니다. 이 메소드의 기본 구현에서는 을 수행하지 않지만 많은 UIKit 클래스는 비어 있지 않은 구현을 제공합니다. awakeFromNib 메서드 중에 언제든지 수퍼 구현을 호출 할 수 있습니다.

은 엑스 코드 (8) 전에 애플이 Xcode8와 함께이 변경되었습니다 howeever이에 대한 엄격한 컴파일러 요구 사항을, 없었다, 그리고 (SWIFT 또는 super.awakeFromNib()) [super awakeFromNib]에 대한 호출로 awakeFromNib에없는 경우 컴파일러는 오류로 취급합니다.

그래서 스위프트 버전은 다음과 같이 보일 것입니다 :

func awakeFromNib() { 
    super.awakeFromNib() 

    ... your magical code ... 
} 
+0

고마워요! 문서 링크를 통한 최상의 답변! –

+0

주문은 중요하지 않습니까? 어떤 사람이'super awakeFromNib '를 자신의 구현을 시작하기보다는 끝으로하고 싶다면 어떤 이유가 있을까요? – micnguyen

+0

@micnguyen 슈퍼 메서드의 동작을 오버라이드하여 확장한다는 점은 주목할 가치가 있습니다. 그래서 이것을 고려할 때, super는 자신의 것을 먼저 구현할 기회를 필요로합니다. 그렇지 않으면 당신의 서브 클래스가 이미 완료된 것을 할 수 있기 때문입니다. 나는 끝에 dev를 부르는 것을 보았습니다. 그러나 이것은 좋은 습관이 아니며, 수퍼 콜의 목적에 어긋납니다. – PostCodeism

17

코드에서 'awakeFromNib'메서드를 효과적으로 오버라이드하고 있습니다. NSView 나 superview가 무엇이든 awakeFromNib을 구현합니다. NSView가 미리 올바르게 설정되도록 코드를 만들기 전에 구현 시작시 super를 호출해야합니다.

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
} 
관련 문제