2013-05-31 1 views
1

조건부를 통해 문자열을 전달하는 몇 개의 클래스가 있습니다. 결국, View Controller는 그것을 포착하여 자신이 소유 한 레이블의 텍스트로 설정합니다. 지금까지 대부분 작동하지만 레이블 텍스트는 변경되지 않습니다. 하지만 NSLog를 통해 ViewController가 올바른 문자열을보고 있음을 알 수 있습니다.레이블 텍스트는 변경되지 않지만 뷰는 변수를받습니다.

'.H'

@interface ViewController : UIViewController 
{ 

} 

@property (strong,nonatomic) IBOutlet UILabel *theLabel; 
@property (strong,nonatomic) NSString *theString; 

-(void)setLabelText:(NSString*)someString; 
-(void)setLabelText:(NSString*)someString { 
    NSLog(@"VC:%@",someString); //writes out the desired string fine! 
    theLabel.text = someString; //doesn't display the text   
} 

.m

본인은 "setLabelText :"호출 할 수 있기 때문에 레이블이 제대로 작동하는지 알고 viewDidLoad에서 방법을, 어떤 임의의 문자열을 입력하고 그것은 나타날 것이다. 그러나, 나는이 방법에서 그것을 바꿀 수 없다. 어떤 도움을 주시면 감사하겠습니다.

"보낸 사람"

-(void)sendToMain:(NSString*)string{ 


    ViewController *newController = [ViewController alloc]; 
    [newController setLabelText:string]; 

} 
+1

'ip'는 어디에 정의되어 있습니까? – Undo

+0

@Undo 죄송합니다. 코드가 수정되었습니다. – Carpetfizz

+1

코드 끝 부분에 이것을 넣으십시오 :'NSLog (@ "% @", theLabel);', 그리고 그것이 무엇을 제공하는지보십시오. – Undo

답변

1

귀하의 문제는 새의 ViewController의 객체를 생성하고 기존 객체에 변수를 변경하려고한다는 사실에있다. 다른 파일에서 ViewController에 액세스하려면 ViewController를 다른 클래스의 델리게이트로 설정하십시오. 그런 다음 델리게이트 함수를 호출하여 라벨의 텍스트를 설정합니다.

Here은 대리인을 사용하는 방법에 대한 자습서입니다.

또한 주 스레드 만 사용자 인터페이스를 변경할 수 있습니다. 따라서 조건부를 실행하는 스레드가 주 스레드인지 확실하지 않은 경우 다음 코드를 추가 할 수 있습니다.

dispatch_async(dispatch_get_main_queue(), ^{ 

//your code block here 

}); 

이 정보가 도움이되기를 바랍니다.

관련 문제