2012-04-07 3 views
4

새 하위 클래스를 초기화 할 때 부모 클래스의 개체가 반환됩니다.스토리 보드에서 인스턴스화 된 ViewController를 서브 클래스화할 수 있습니까?

부모 :

- (id)init 
{ 
    self = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"EditController"];   
    return self; 
} 

아이 : 나는 ALLOC와 아이를 init이 경우

- (id)init 
{ 
    NSLog(@"New child"); 
    self = [super init]; 
    return self; 
} 

, 그것은 New child를 표시하지만, 부모의 클래스의 객체를 날 다시 제공합니다. 자식에서만 선언 된 메서드를 호출하면 충돌이 발생합니다.

누군가 초기화 프로세스가 여기서 어떻게 작동하는지, 어떻게 자식 개체를 만들 수 있는지 설명 할 수 있습니까?

+1

제 해결 방법은 스토리 보드 대신 표준 XIB를 사용하는 것이지만 여전히 궁금합니다. –

+1

그래, 새로운 질문이지만 실제 답변 하나! –

+0

미안하지만, 나는 다른 하나를 보았을 때 (그리고 좀 더주의를 기울이면서 나이가 들었다고 생각할 때) 질문을 던졌고, 둘 다에 대해서만주의를 기울였다. (최소한, 당신의 것은 표시되지 않았다. "중복"하지만 "답이 다른 곳에 있습니다") ... – Rick77

답변

0

나는 부모님의 init자동 등록 된 EditController 인스턴스를 돌려 주었기 때문에 발생했다고 생각합니다. 어쨌든, 스토리 보드에서 직접 클래스 유형을 어린이의 클래스 유형으로 설정하는 것이 어떻습니까?

+0

동일한 기본 요소를 상속하는 여러 하위 클래스가 있으므로 스토리 보드에서 기본적으로 동일한 복사본을 필요로한다고 생각합니까? XIB는 나를 위해 잘 작동합니다. 수영장이 자식 init가 호출 될 때까지 제거 할 기회가 없어야하므로 autorelease 문제가 될 수 있는지, Storyboard 부모 클래스로 init'ed를 할당 할 때까지 계속 유지됩니다. 나는 그것을 명시 적으로 해제 ... –

+0

XIB를 사용하는 경우에 더 많은 의미가 있습니다. 메모리 문제에 관해서는, 당신이 올린 코드에서'UIStoryboard'에서 얻은 ** autoreleased ** 인스턴스로'self '를 덮어 쓴다. 이것은 최소한의 말로 프로그래밍 오류이다 (명명 규칙에 어긋남). – Lvsti

관련 문제