无需用户交互即可访问UILabel Outlet

时间:2009-07-10 18:40:51

标签: iphone cocoa-touch

我正在处理我正在处理的iPhone应用程序的问题。

它使用一个名为Radio的单独类来流入一个站。当更新流的标题时,它使用updateTitle方法回调到RadioViewController:

- (void)updateTitle:(NSString *)newTitle
{
    NSLog(@"update title called with title: %@", newTitle);
    [self.nowPlaying setText:newTitle];
}

出于某种原因,我似乎无法立即进行更新。如果我从viewDidLoad调用setText,那么它可以正常工作。

此外,通过任何类型的用户交互,无论是按钮还是其他内容,文本都会发生变化,如:

- (IBAction)playButton:(id)sender
{
[self.nowPlaying setText:@"now playing test"];
}

nowPlaying在XIB中链接并设置如下:

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

并且updateTitle设置为

- (void)updateTitle:(NSString *)title;

代码构建并运行正常,没有错误。但UILabel并没有改变。

2 个答案:

答案 0 :(得分:0)

设置标题后,NSLog self.nowPlaying.title以确保它已被更改。

您可能需要明确的[self.nowPlaying setNeedsDisplay];来强制更新。

如果没有,请进行常规调试以确保self.nowPlaying是真实对象等。您确定nowPlaying是否连接到IB中的正确标签?

答案 1 :(得分:0)

尝试按如下方式编辑updateTitle方法:

NSLog(@"Update title will update %@ with %@", self.nowPlaying, newTitle);
[self.nowPlaying performSelectorOnMainThread:@selector(setText:) withObject:newTitle waitUntilDone:NO];

我感觉你在后台线程上更新标题,这在许多用例中都不受支持。