2012-01-08 4 views
1

ViewController.h/m과 다른 클래스 Keyboard.h/m이 있습니다. 내 ViewController.h에서 가 나는 UILabel의이 :다른 클래스에서 uilabel을 변경하는 방법

@interface ViewController : UIViewController{ 

UILabel *label; 

} 

@property (nonatomic, retain) IBOutlet UILabel *label; 

을 내 ViewController.m는

#import "ViewController.h" 
@synthesize label; 
... 

가 지금은 Keyboard.m에서 레이블을 변경하려면 그렇게 보인다. 나는 이런 식으로 뭔가를 시도 :

#import "ViewController.h" 
... 
ViewController *vc; 
vc.label.text = @"text"; 

그것이 오류없이 컴파일하지만 레이블이 그것은 당신이 여기서 뭘하고 있다는 경향이 매우 오류의

답변

1

변경되지 않습니다.

ViewController *vc; 

포인터를 선언하지만 초기화되지는 않습니다. 따라서 vc.label.text 속성에 액세스 할 때 objc_messageSend()에 위조 포인터가 전달되므로 충돌이 발생할 수 있습니다! (이드가 그렇게하지 않으면 운이 좋다.)

어쨌든 : 잘 수행했다면 ViewController *vc = [[ViewController alloc] init];처럼 새 인스턴스를 만들면 다른 인스턴스에 영향을 미치지 않는다. 인스턴스에 대한 포인터를 어딘가에 저장해야합니다 (예 : e). 지. 응용 프로그램의 응용 프로그램 델리게이트 객체에 @property (retain) ViewContrller *vc;을 설정하고,이 같은 해당 속성을 통해 액세스 :

[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text"; 

작동한다 그런 식으로.

희망이 있습니다.

0

어떻게 vc 변수를 시작 하시겠습니까? 나는 그것이 오류가 어디에서오고 있는지 짐작하고있다. 일을 시도 :

VC는 = [[의 ViewController ALLOC] initWithNibName가 "의 ViewController @].

당신은 이미, 당신의 함께 IBOutlet가 제대로 중독되어 있는지 확인하고 있다면 당신은 변수를 설정하는 오류가 다른 곳에서 발생해야합니다.

관련 문제