2012-07-30 5 views
2

코드는 Stanford CS193p에서 제공됩니다. 그것을 확인하기 위해 NSLog를 추가했습니다. 레이블이 초기화되지 않은 것처럼 보입니다. 어떤 생각?왜 UILabel이 초기화되지 않았습니까?

@interface AskerViewController() <UITextFieldDelegate> 
@property (weak, nonatomic) IBOutlet UILabel *questionLabel; 
@property (weak, nonatomic) NSString *question; 
@end 


@implementation AskerViewController 
@synthesize questionLabel = _questionLabel; 
@synthesize question = _question; 


- (void)setQuestion:(NSString *)question 
{ 
    _question = question; 
    self.questionLabel.text = question; 
    NSLog(@"label is %@", self.questionLabel); 
} 

@end 

NSLog의 결과는 다음과 같습니다

2012-07-31 01:56:45.177 Kitchen Sink[23931:f803] label is (null) 
+0

Getter and setter of _what_? 그들이 전화를받을 때 전화를 받으면 더 많은 정보를 주어야합니다. 그렇지 않으면이 질문에 답을 얻을 수 없습니다. – jrturton

+0

당신이 옳습니다. 게시물을 수정하고 질문을 구체적으로 작성하는 코드를 작성합니다. – Philip007

+0

UILabel이 questionLabel에 연결되어 있습니까? –

답변

7

당신은 아마 당신이 prepareForSegue에 아마, 뷰 컨트롤러를 표시하기 전에 해당 문자열 속성을 설정하는 :? 이 시점에서 뷰는로드되지 않았고 label 속성은 여전히 ​​nil입니다.

right thing by having a separate string property을 수행하고 있습니다. viewDidLoad에서 라벨의 텍스트도 설정해야한다는 단계가 누락되었습니다.이 시점에서 라벨은 스토리 보드에서 인스턴스화되어 사용할 준비가되었습니다.

viewDidLoad가 호출되기 전에 속성을 설정하는 경우 nil이라는 레이블이 필요합니다. prepareForSegue에서 속성을 설정하는 경우보기가 아직로드되지 않은 것입니다. 보기 컨트롤러는 화면에 표시해야 할 때까지 뷰와 하위보기를로드하지 않으며, segue가 수행 될 때까지는 발생하지 않습니다. 그리고 추측 할 수 있듯이 segue가 수행되기 전에 prepareForSegue가 완료됩니다.

+0

스토리 보드에 레이블이 있으면 할당하거나 초기화하지 마십시오. 라벨이 어디에서 오게 될까요? viewDidLoad가 호출되기 전에 속성을 설정하는 경우 nil이라는 레이블이 필요합니다. prepareForSegue에서 속성을 설정하는 경우보기가 아직로드되지 않은 것입니다. 보기 컨트롤러는 화면에 표시해야 할 때까지 뷰와 하위보기를로드하지 않으며, segue가 수행 될 때까지는 발생하지 않습니다. 그리고 추측 할 수 있듯이 segue가 수행되기 전에 prepareForSegue가 완료됩니다. 이것은 긴 코멘트로 바뀌었고, 나는 그것을 나의 대답에 추가 할 것이다 ... – jrturton

+0

나는 본다. 나는 segue.destinationViewController.question과 같은 것을 setForSegue에 넣는다. setForSegue는 setLevel을 호출한다. setQuestion은 대상 뷰 컨트롤러의 뷰 계층 구조에서 서브 뷰로 세 구잉하는 동안 아직로드되지 않은 questionLabel에 액세스하려고 시도한다. 이것이 NSLog가 null을 반환하는 이유입니다. – Philip007

+0

정확히 맞습니다. 뷰가 아직로드되어있는 동안 질문을 다시 설정할 수 있기 때문에 viewDidLoad에 여분의 비트가 필요하기 때문에 코드를 setQuestion에 보관해야합니다. – jrturton

관련 문제