1

我有几个通过条件传递字符串的类。最后,视图控制器捕获它并将其设置为它拥有的标签的文本。到目前为止,它的大部分工作,但是,标签文本没有改变。但是通过 NSLog,我可以看到 ViewController 看到的是正确的字符串。

'。H'

@interface ViewController : UIViewController
{

}

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

-(void)setLabelText:(NSString*)someString;

.m

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

我知道标签可以正常工作,因为我可以从 调用“setLabelText:”方法viewDidLoad,然后输入一些随机字符串,它就会显示出来。但是,我似乎无法从这种方法中改变它。任何帮助,将不胜感激。

“发件人”

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


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

}
4

1 回答 1

1

您的问题在于您正在创建一个新的 ViewController 对象,并试图更改现有对象上的变量。如果您想从不同的文件访问您的 ViewController,请将 ViewController 设置为其他类的委托。然后调用委托函数来设置标签的文本。

是有关如何使用委托的教程。

另外请注意,只有主线程可以更改用户界面。因此,如果您不确定执行条件的线程是否是主线程,您可以添加以下代码。

dispatch_async(dispatch_get_main_queue(), ^{

//your code block here

});

我希望这有帮助。

于 2014-03-07T03:54:37.897 回答