2011-10-24 3 views
2

일부 코드를 검토 한 결과, UITableView이고 datasourcedelegate이이 UITableView 인 UIViewController가 <UITableViewDataSource, UITableViewDelegate>이라는 프로토콜을 선언하지 않고 단순히 프로토콜을 선언하지만 결코 프로토콜을 선언하지 않는다는 것을 깨달았습니다.UIViewController 데이터 원본 및 프로토콜을 준수하지 않고 UITableView 대리자로?

어떻게 심지어 문서 당? 노력하고 있습니다 :

dataSource 
The object that acts as the data source of the receiving table view. 
@property(nonatomic, assign) id<UITableViewDataSource> dataSource 
Discussion 
The data source must adopt the UITableViewDataSource protocol. The data source is not retained. 
delegate 
The object that acts as the delegate of the receiving table view. 
@property(nonatomic, assign) id<UITableViewDelegate> delegate 
Discussion 
The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained. 

내가이 일을하는 과정에 필요한 방법을 가지고 할 모든 것이 완벽하게 작동, 모든 유형의 어떠한 경고도 없다가, 이유는 일?. 나는이 프로토콜을 선언했다는 것을 알고있는 UITableViewController을 상속 받고 있지 않다. 이것은 단지 UIViewController 서브 클래스이다.

편집 : 분명히 거기에 설정된 경우 IB는 경고 메시지를 표시하지 않지만 코드에서 예상대로 작동합니다. 나는 IB가 당신에게 경고를 주어야한다고 생각하지만 나는 그렇지 않다고 생각합니다.

답변

2

의 잘 속는 사람은 (UITableViewDataSource에 대한 UITableViewDelegate 위해 아무도 두에있는 한 당신은 UITableViewDelegate 및 UITableViewDataSource에서 필요로 표시하는 방법을 구현 같다) 그러면 괜찮습니다. tableView는 respondsToSelector를 사용하여 선택적 방법을 확인합니다. 인터페이스 빌더에서 연결하고 있습니까? 코드에서 수행 할 경우 클래스가 UITableViewDataSource 및 UITableViewDelegate를 준수하지 않는다는 경고 메시지가 표시되어야하지만 런타임에 개체가 런타임에 필요한 메시지에 응답하면 결국 작동합니다.

+0

코드에서 시도 할 때 예상대로 경고를 표시하지만 IB에서 수행 할 때 아무 것도 표시하지 않으면 IB에 경고가 표시되어야한다고 생각합니다. –

+0

@OscarGomez 동의합니다. IB에 경고가 표시됩니다. – jbat100

1

테이블 뷰는 지정된 객체가 (선언되지 않은) 프로토콜을 준수하기를 원하면 지정된 객체에 데이터 소스 및 위임 메시지를 보내고 있습니다.

UITableViewDataSource & UITableViewDelegate를 인터페이스 .h 파일에 추가하면 유형 검사 및 준수 (예 : '필수'메소드 등을 구현하지 않은 경우 경고)가 제공됩니다.

위에서 요약 한 내용에 대한 공식적인 설명이 더 많습니다.

BTW, 질문이 하나

UITableView without <UITableViewDelegate, UITableViewDataSource> still works!

+0

정보와 링크를 제공해 주셔서 감사 드리며, 제 경고는 아무런 경고도하지 않으므로 매우 이상합니다. –

관련 문제