2014-09-15 2 views
6

내 응용 프로그램은 UITableViewController의 하위 클래스 인 Stanford 과정의 CoreDataTableViewController를 사용합니다.UITableViewController 하위 클래스는 UIDataSourceModelAssociation 프로토콜을 구현하지만 해당 메서드는 호출되지 않습니다

내 응용 프로그램의 특정보기에 대해 특정보기를 관리하기 위해 CoreDataTableViewController의 하위 클래스를 만듭니다.

저는 최근에 대부분의 내 응용 프로그램에서 상태 인코딩 및 복원을 연결했는데 모두 정상적으로 작동하는 것 같습니다. 마지막으로 떠난 유일한 것은 UIDataViewModelAssociation 프로토콜을 구현하여 UITableViews의 보이는 행과 선택된 행을 유지하는 것입니다 (테이블 뷰의 편집 상태를 유지하기를 바랬습니다. 삭제, 아직 확인하지 않은 상태).

CoreDataTableViewController 내에서 구현 된 UIDataSourceModelAssociation은 CoreDataTableViewController 내에서 모든 내보기에서 작동하지만 기능이 작동하지 않으며 중단 점을 추가해도 두 UIDataSourceModelAssociation 메서드 중 어느 것도 호출되지 않습니다. 홈 버튼으로 내 앱을 배경에 넣거나 Xcode에서 다시 실행하여 추위에 복원 할 수 있습니다.

CoreDataTableViewController 및 내 하위 클래스는 실제로 내 테이블보기에서 행을 표시하는 일부 dataSource 메서드를 구현합니다. 나는 주변을 수색하고 UITableViewController가 자동으로 tableView의 dataSource로 추가되는 것을 발견했다.

내가 추가 한 정신은 내 서브 클래스가 자신을되는 데이터 소스를 확인에 실패 형태

assert(self.tableView); 
assert(self.tableView.dataSource == self); <--- fails here 

의 기능을있는 viewDidLoad에서 주장한다. 디버거를 로깅하고 사용하여이 시점에서 dataSource가 nil이 아닌 것을 볼 수 있습니다.

나는 우리가 클래스를 서브 클래 싱 할 때 각각의 클래스가 동일한 자체 값을 공유하는지 궁금하다. 또는 내 UITableViewController가 자체적으로 dataSource로 설정했기 때문에 그렇다.하지만 두 번 하위 클래스로 서브 클래 싱했다. 내 자신의 특정보기 인스턴스를 자체 UITableViewController 부모와 약간 다릅니다. 또는 dataSource를 가로 채고 필요에 따라 전달하는 다른 것입니다. UIDataSourceModelAssociation 메서드가 구현되는 곳에서 자체적으로 하위 클래스를 하드 코딩해야하거나 CoreDataTableViewController 자체를 명시 적으로 dataSource로 추가해야한다고 수정해야합니다.

참조 용 내 뷰 계층 구조는 내 UITableViewController 서브 클래 싱 된 뷰로 구성되어있어 들었던 NavigationController 내부에 문제가 발생할 수 있습니다.

클래스 전반에 걸쳐 자체 포인터와 관련하여 서브 클래 싱이 어떻게 작동해야하는지에 대해 약간의 명료성이 있으며 내 프로토콜 메서드가 호출되지 않는 이유를 알아낼 수 있는지 궁금 할 때 정말 고맙겠습니다.

건배

답변

1

나는 아직도 내 tableViewController의 인 dataSource가 직접 자기로 설정되지 않은 이유를 모르겠어요. 그러나 분명 내 dataSource 메서드는 내 tableView 함수로 호출됩니다. 분명히 어떤 종류의 객체가 나를 위해 실제 클래스에 dataSource 메소드를 전달하고있다 ...

마지막으로 UIDataSourceModelAssociation 프로토콜 메소드를 호출하는 것은 UITableViewController와 UITableView가 모두 복원되었는지 확인하는 것처럼 간단하다. ids .. 복원 ID를 가진 바깥 쪽 UITableViewController 만 있으면 이러한 메서드 중 아무 것도 호출되지 않습니다.슬프게도 지금은이 방법으로 scuppered있어

내 UIManagedDocument로드가 완료되기 전에 내가 실제로 그 안에 유용한 아무것도 할 수 없습니다 호출되고. 그것은 또 다른 문제입니다.

+0

입력 해 주셔서 감사합니다.이 "동작"도 발생했습니다. UITableViewController 서브 클래스가'dataSource' 속성을 명시 적으로 self (또는 무엇이든)로 설정하여 UIDataSourceModelAssociation 메서드를 호출하도록했습니다. –

관련 문제