2010-03-02 2 views
1

나는 tabwindow 컨트롤러가있는 mainwindow.xib를 가지고 있습니다. 첫 번째 탭 표시 줄에는 "View1.xib"에서로드하는보기가 있습니다. 내 View1.xib에서 UI 요소를 드래그합니다. 이 파일은 .h :iPhone : 속성에 대한 @synthesize 지시어를 추가 한 후에 속성이 표시되지 않습니다.

#import <UIKit/UIKit.h> 
@class View1Controller; 


@interface View1Controller : UIViewController { 
    IBOutlet UIView *view; 
    IBOutlet UIButton *startButton; 
} 

@property (retain, nonatomic) UIView *view; 
@property (retain, nonatomic) UIButton *startButton; 


-(IBAction)startClock:(id)sender; 

@end 

.m 파일에는 아무 것도 수행하지 않습니다. 정상적으로 작동합니다. 보기와 단추를 볼 수 있습니다. 하지만 내가 추가 한 후 :

@synthesize view, startButton; 

응용 프로그램을로드 할 때 아무런 버튼없이 빈보기가 표시되지만 오류는 발생하지 않습니다. 무슨 일 이니?

답변

1

viewstartButton 변수를 IBOutlets로 선언하는 것이 문제입니다. 즉, Interface Builder는 XIB 파일에서 이러한 변수를 직접 바인딩합니다.

정의한 속성은 IBOutlets가 아닙니다. 합성 할 때 getters/setter를 덮어 쓰고 Interface Builder는 더 이상 바인드 할 수 없습니다.

, 당신의 문제를 해결하여 멤버 변수에서 함께 IBOutlet 지정자를 제거하고 다음에 속성 선언을 변경하려면 :

@property (retain, nonatomic) IBOutlet UIView *view; 
@property (retain, nonatomic) IBOutlet UIButton *startButton; 
+0

을 나는 합성이 게터를 만들 것이다, 동의 setter 메서드를 사용하지만 IBOutlet이 없으면 XIB와 관련이 없으며 뷰를 재정의하므로 빈 상태가됩니다. UIViewController {UIViewController}를 건드리지 않아도 IBOutlet을 배치하는 것이 제 견해입니다. IBOutlet UIView * myView; IBOutlet UIButton * startButton; } – Paulo

2

기본적인 문제는 UIViewController 이미 view 속성을 가지고 있다는 것입니다. UIViewController 하위 클래스에서 재정의하면 해당 뷰 속성을 덮어 씁니다. 솔직하게, 나는 그것이 심지어 컴파일하는 것에 놀란다.

를 해결하려면 :

전혀 상속 하나 옆에 다른보기 속성을 필요로하는 경우 (1) 먼저, 스스로에게 물어. 컨트롤러에 대한 뷰가 하나 뿐인 경우 상속 된 속성을 사용했습니다.

(2) 이런 식으로 이름을, 두 번째보기에 referece을 필요로 할 경우

#import <UIKit/UIKit.h> 
//@class View1Controller; <-- don't forward declare a class in its own header 


@interface View1Controller : UIViewController { 
    // IBOutlet UIView *view; <-- this is inherited from UIViewController 
    IBOutlet UIView *myView; 
    IBOutlet UIButton *startButton; 
} 
//@property (retain, nonatomic) UIView *view; <-- this is inherited from UIViewController 
@property (retain, nonatomic) UIView *myView; 
@property (retain, nonatomic) UIButton *startButton; 


-(IBAction)startClock:(id)sender; 

@end 

을 다음 구현 :

//@synthesize view; <-- this is inherited from UIViewController 
@synthesize myView, startButton; 
+0

+1, 이것은 나에게 일어난 ... 많은 시행 착오를 발견 스택 오버플로를 먼저 상담해야 했어! –