2012-02-02 2 views
1

(내 추가 사용자 지정)에 UITableViewController의 자체 버전을 만들려고합니다. 그래서 내 수퍼 클래스에서는 대리자와 데이터 소스를 모두 구현하고 UITableView 개체 대리자 및 데이터 소스 속성을 "this"로 설정합니다. 유일한 문제는 필자가 의무적 인 dataSource 및 위임 메서드를 구현하지 않았다는 불평하는 컴파일러 경고를받는 것입니다. 내 사용자 정의 UITableViewController 하위 클래스를 만들 때 이러한 메서드를 구현할 수 싶습니다.사용자 지정 UITableViewController 클래스 구현 및 대리자 경고 피하기

경고를 없애기위한 깔끔한 방법이 있습니까? 아니면 필수 대리자 메서드의 빈 버전을 넣고 하위 클래스에서 재정의 할 수있는 유일한 방법입니까? 이 나쁜 습관인가? 누구든지 UITableViewController 클래스로 Apple이이를 어떻게 수행하는지에 대한 통찰력을 가지고 있습니까?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    [self doesNotRecognizeSelector:_cmd]; 
    abort(); 
} 

_cmd 변수는 현재 방법의 선택입니다 :

+0

"추가 맞춤 설정"이란 무엇을 의미하는지 조금 더 알려주시겠습니까? 어쩌면 거기에 "UITableViewController"자신의 버전을 만드는 것보다 더 나은 것을 할 수있는 방법이 있습니다. –

+0

큰 점은 모든 응용 프로그램 뷰 컨트롤러를 설정하는 UIViewController 클래스에서 상속하는 것이 가장 중요하다는 것입니다. –

+0

UIViewController에서 아무런 문제없이 UITableView를 설정할 수 있습니다. UITableViewController가 필요 없습니다. –

답변

3

나는 "추상적 인"방법이 패턴을 사용합니다. self처럼 자동으로 제공됩니다.

컴파일러에서 abort()이 반환되지 않는다는 것을 알고 있기 때문에 abort()을 호출해야하지만 약 doesNotRecognizeSelector:은 알 수 없습니다.

적어도 iOS 5에서는 UITableViewController이 스토리 보드에서 미리 정의 된 (정적) 행로드를 지원하므로 UITableViewController 메서드는 비어 있지 않습니다.

+0

감사합니다. 그냥 궁금하지만 추상적 인 패턴을 구현하는 것, 그 방법을 공백으로 두는 것 대 그 목적은 무엇입니까? 사용자가 호출 할 수있는 메서드라면 더 이해할 수 있지만 대리자 메서드는 시스템/대리자에 의해서만 호출됩니다. 아니면 뭔가를 놓친 것일 수도 있습니다. 설명해 주시면 감사하겠습니다. –

+0

OK 반환 값에 대한 경고를 발생시키지 않도록 왜 그렇게했는지 알 것 같습니다. 메서드에 반환 값이 없으면 그냥 공백으로 남겨 두거나 다른 작업을 수행 했습니까? –

+0

'doesNotRecognizeSelector :'를 반환하는 것이 가능하기 때문에 (드물긴), 항상'abort()'를 사용합니다. –

관련 문제