2011-02-07 6 views
2

다음과 같은 문제가 있습니다. 나는 일치 펜촉의 jQuery과에 인터페이스 빌더에 myTableView를 연결 한 위의iPhone 뷰 컨트롤러 및 IBOutlet 서브 클래 싱하기 UITableView

@interface MyViewController : UIViewController { 
    IBOutlet UITableView *myTableView; 
} 

@property (nonatomic, retain) IBOutlet UITableView *myTableView; 

처럼 꽤 많이의 ViewController를 만들었습니다.

@interface YourViewController : MyViewController { 

} 

을 그리고 난 탭 항목에 TabBarController YourViewController에서로드 : 난 너무로 YourViewController을 만들 수 MyViewController를 서브 클래스했습니다. MyViewController가 실제로 마지막에 호출 된 것을 볼 수 있지만 테이블 뷰는 에뮬레이터에 표시되지 않습니다.

MyViewController 디버깅을 시도했는데 IBOutlet이 nil로 표시됩니다.

왜 그럴까요?

답변

0

상속 및 IBOutlets 및 IBAction과 관련된 주요 문제가 발생했습니다. 나는 그것을 피하고 다른 방법으로 공유 물건을 만들 것을 권합니다.

예를 들어 메모리 경고를받을 때 버그로 인해 심하게 타격을 받았습니다. 아웃렛과 액션은 기본 클래스와 파생 클래스에서 정의되었을 때 제대로 다시 연결되지 않았습니다.

+0

구현 방법에 대한 의견이 있으십니까? 모든 하위 클래스는 MyViewController와 똑같은 일을 수행하고 있으며 변경되는 유일한 방법은 데이터를 각각 검색하는 것입니다. initCoder와 관련이 있다는 느낌이 들었습니다. 표준 서브 클래 싱 시나리오 여야합니다 ... – mobius

+0

글쎄, 저는 기본 클래스에서 모든 무거운 작업을 유지하고 파생 된 클래스에서만 아울렛과 액션 만 있습니다. 가능한 한. – jv42

0

아마도 MyViewController의 nib 파일이로드되지 않았을 것입니다. YourViewController에 특정 nib 파일을 사용하고 있습니까? 그리고 당신은 YourViewController를 어느쪽으로 만들었습니까?

YourViewController에서 "awakeFromNib"메서드를 정의한 다음 [super awakeFromNib]를 호출 할 수 있습니까?

그러나 문제를 이해하려면 개체를로드하는 방법과 Nibs를 사용하는 위치와 위치를 명확하게 설명해야합니다.

+0

나는 당신이 올바른 길을 가고 있다고 생각합니다. YourViewController가 펜촉으로로드됩니다. (Tab Bar Item의 NIB로 지정됩니다.) initWithNibName을 사용하여 YourViewController를로드하면 MyViewController의 NIB를 제대로 표시합니다. 그러나 TabBar 펜촉에서로드 될 때 아무 것도 표시하지 않습니다. 내가 제안한 awakeFromNib 시도했지만 아무 것도 나옵니다. – mobius

0

코드를 사용하여 동적으로 추가하는 경우에만 작동합니다. Nib를 사용하지 않습니다.

+0

Nib를 통해로드 할 수있는 방법이 없습니까? 우리가 initWithCoder를 덮어 쓴다고해도? – mobius

+0

initWithCoder를 오버로드하여 initWithNibName을 호출하려고 시도했지만 제대로 작동하지 않습니다.보기를 전환하지 않는 탐색 컨트롤러에 문제가있는 것 같습니다. 항상 펜촉을 복제하고 File YourController를 소유하고 탭바에서 펜촉을로드하십시오 ... – mobius

0

UITableView (예 : myTableView)에는 데이터 소스 및 컨트롤에 대한 대리인이 필요합니다. 컨트롤러에 xib의 테이블보기에 대한 링크가 필요합니다.

  1. 컨트롤러의 인터페이스 섹션에 테이블 위임 프로토콜을 선언하십시오.

  2. IB를 사용하여 xib의 TableView를 소유자 파일 : delegates에 연결하십시오.

  3. IB를 사용하여 파일 소유자 myTableView를 xib의 tableView에 연결하십시오.

도움이되기를 바랍니다.

+0

당신이 언급 한 것에 맞습니다. 나는 그것들을 다뤘다. 그러나 질문의 ​​단순함을 위해서 내가 언급하지 않았다. 문제는 여전히 남아있다. – mobius

-1

당신은 MainWindow.xib에

  • 열기 MainWindow를에서 전체 탐색 스택을 가지고 있다고 가정.(있는 UITableViewController를 서브 클래스 화되어 컨트롤러가 호출 무엇이든 또는) XIB
  • 선택 YourViewController는
  • 선택
  • 속성을 속성 'NIB 이름'속성이 올바른 YourViewController
을 선택 (또는 어떤 이름)이 있는지 확인

나는이 똑같은 문제를 안고 있었는데, 이것으로 해결되었다.