2013-08-09 3 views
0

TimerViewController이라는 사용자 정의보기 컨트롤러와 FirstViewControllerFourthViewController이라는 서브 클래스가 있습니다.NSLogging UILabel의 텍스트 출력이 null입니다.

FirstViewController의 인스턴스를 FirstViewController.controller으로 선언했습니다. FourthViewController.mviewDidLoad 방법에서

, 나는이 : 스토리 보드에서

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"]; 

, 나는 mainController로 뷰 컨트롤러 ID를 선언 FourthViewController의 사용자 정의 클래스를 선언했습니다. 그런 다음, FourthViewController.m에서 내가 가진 :

controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"]; 
NSLog(@"%@", controller.mainLab.text); 

이, 그러나, 출력 (null).

왜 이런 일이 발생합니까?

+0

mainLab에 로그인하면 어떻게됩니까? – rdelmar

+0

여전히 얻을 수 있습니다 (null) – user1626438

+0

mainLab이란 무엇입니까? IBOutlet입니까? 이 코드가있는 컨트롤러와 같은 컨트롤러에 있습니까? – rdelmar

답변

2

mainLabnil이어야합니다. 따라서 콘센트가 XIB에 연결되어 있지 않은 것 같습니다. 포맷은 낭비없는 문자열을 사용 stringWithFormat: 제쳐두고


.

+0

내 콘센트를 내 XIB에 연결 했어요. 다른 아이디어? – user1626438

+0

그러면 XIB를 올바르게로드 할 수 없습니다. – Wain

1

귀하의 프로젝트 나머지 부분에 대해 알려 주실 것을 부탁드립니다.

저는이 Xcode를 실행하기 만하면됩니다. 프로세스가 간단합니다. 당신의 XIB에

드래그 UI 라벨 테스트에 대한 .H

에 라벨에서

제어를 클릭 내가 그랬어

#import "SOViewController.h" 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.mainLabel.text = @"This is my label"; 
    NSLog(@"%@", self.mainLabel.text); 
} 

내 .H는 다음과 같습니다

#import <UIKit/UIKit.h> 
@interface SOViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UILabel *mainLabel; 
@end 

이 부분이 사용자 정의 클래스입니까? 다른 일이 있습니까? 그것의 바닐라 라벨면 위의 코드를 사용하여 문제없이 작동합니다.

+0

맞춤 클래스의 하위 클래스입니다. 속성을 선언하고이 사용자 정의 클래스의 .h 및 .m에서 합성했습니다. 질문을 단순화하려고했지만 전체 코드를 제공해야합니다. 전체 코드를 보려면 게시물로 돌아 가기 – user1626438

1

귀하의 mainLab이 아직 생성되지 않은 것 같습니다. nil 객체에서 메소드를 호출하면이 메소드는 자동으로 nil을 반환합니다. 이 코드 줄을 실행하기 전에 레이블을 실제로 만들어야합니다.

0

viewDidLoad 메서드가 아직 실행되지 않았기 때문에 인스턴스를 만든 직후 다른 컨트롤러의 레이블 (또는 다른 UI 요소)에 액세스 할 수 없습니다. 다른 컨트롤러에서 레이블의 텍스트를 설정하려면 해당 컨트롤러에 텍스트를 전달하고 viewDidLoad 메서드에서 레이블의 텍스트를 설정해야합니다.그래서 대신에 이런 :

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"]; 
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"]; 

이 작업을 수행해야합니다 mainLabText 당신이 FourthViewController에서 만든 문자열 속성입니다

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"]; 
controller.mainLabText = @"This is a string"; 

. 그런 다음 FourthViewController의 viewDidLoad에서 레이블을 채 웁니다.

self.mainLab.text = self.mainLabText;