2013-08-03 2 views
3

iOS의 UIViewController를 서브 클래 싱하는 것에 혼란스러워졌습니다. UICollectionViewDataSource 프로토콜 (구현 파일 내부의 개인 인터페이스)을 준수하는 부모 viewcontroller가 있습니다.iOS의 UIViewController 서브 클래 싱

/* Parent.m */ 

@interface Parent() <UICollectionViewDataSource> 

// this CollectionView is connected to storyboard 
@property (weak, nonatomic) IBOutlet UICollectionView *CollectionView; 

@end 


@implementation Parent 


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return self.somecount; 
} 

@end 

그리고 부모로부터 상속 한 하위보기 컨트롤러를 만듭니다. 자식은 부모의 개인 인터페이스에 구현 된 데이터 소스로 UICollectionViewDataSource에 대해 아무것도 모릅니다.

/* child.h */ 

@interface child : parent 
// nothing was mentioned here that parent has a method to set the count using 'somecount' 
@end 

그런 다음 mainstoryboard에서 viewcontroller를 하위보기 컨트롤러로 설정합니다.

어떻게하면 부모 속성 'somecount'에서 값을 가져오고 자식 값을 설정합니까?

감사합니다.

답변

2

당신은 질문 :

방법 IOS 부모의 재산에서 값을 가져 와서 somecount와 자식에 대한 값을 설정?

하위 클래스는 항상 super 클래스의 속성과 메서드를 상속합니다. 공용 인터페이스 일 수도 있고 아닐 수도 있습니다 (우리는 알 수 없으므로 somecount 선언을 표시하지 않았습니다). 그러나 관계없이 런타임에 이러한 메소드/속성을 재정의하지 않는 한 런타임에 해결됩니다. child, 당신은하지 않는 것으로 보입니다). parent에 개인 메소드 및 속성이있는 경우 child에서 컴파일 타임에 표시되지 않을 수도 있지만 여전히 존재하며 런타임에 올바르게 작동합니다. childUICollectionViewDataSource 메소드를 구현하지 않는 경우 수집 볼 수있는 장면이 컬렉션 뷰의 데이터 소스로 child을 지정할 때

그래서, 자동으로 parent의 사람들을 호출 끝날 것입니다. 마찬가지로 해당 메서드 중 하나라도 somecount을 참조하는 경우 child이이 메서드를 재정의하지 않으면 parent의 적절한 접근 메서드를 다시 호출하게됩니다. 결론 childparent의 모든 동작, 메서드 및 속성을 자동으로 상속받습니다.

+0

감사합니다. Rob, 응용 프로그램을 디버그하려고했습니다. 첫 번째 줄은 부모가됩니다 : @property (weak, nonatomic) IBOutlet UICollectionView * CollectionView; 부모님의 private 속성에 값을 설정할 수있는 이유는 스토리 보드가 collectionView가 부모 클래스의 콘센트라는 것을 알고 있기 때문입니다. 어쨌든 스토리 보드에서 코드를 디버그하여 출발점과 단계의 세부 흐름을 파악할 수 있습니다. 감사합니다. – Justin

+0

내가 내 질문을 명확하게 보자 : 1. 어떻게 응용 프로그램의 시작 부분에서, 어떤 방법으로 스토리 보드의 맨 처음부터 디버깅하는 코드의 흐름을 찾아 냈지? 즉 초기화 스토리 보드 - 콜렉션 뷰 초기화 - 콜렉션 뷰의 컨트롤러 초기화 - 또는 먼저 부모 초기화? 2. "결론은 자녀가 부모의 모든 행동, 방법 및 속성을 자동으로 상속합니다." 이것은 자식 클래스가 (부모로 선언 된) private 속성을 가질 것이라는 것을 의미합니까? 그러나 아이는 컴파일 시간에 그들을 액세스 할 수 없습니까? 내 자신의 재산에 어떻게 접근 할 수 없습니까? – Justin

+0

여기 링크 : http : //www.stanford.에듀/클래스/cs193p/CGI - bin에/드루팔/시스템/파일/sample_code/예쁜 % 20Matchismo.zip 는 감사 CardGameViewController 및 PlayingCardGameViewController를 보라 – Justin