2009-07-10 9 views
1

私が取り組んでいるiPhoneアプリに問題があります。それはで駅をストリーミングラジオと呼ばれる別のクラスを使用していますユーザーインタラクションなしでUILabelアウトレットにアクセスする

ストリームのタイトルが更新されると、それは方法の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とセットアップにアップリンクされている:

コードのビルドとエラーなしで、正常に動作

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

として

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

そしてupdateTitleセットアップです。しかし、UILabelは変化していません。

+0

updateTitleが呼び出される(つまり、そのログメッセージが表示されますか?)そうでない場合は、RadioViewControllerの上流を調べて、コードパスに到達していることを確認する必要があります。 –

+0

はい、ログメッセージが出力されます。また、私は複数のビューのセットアップ、それは何かを変更している。 –

+0

それはかなり神秘的です...あなたはセカンダリスレッドからupdateTitleを呼び出すことはありますか? –

答えて

0

タイトルを設定した後、NSLogにself.nowPlaying.titleが変更されていることを確認します。

更新を強制するには、明示的に[self.nowPlaying setNeedsDisplay];が必要な場合があります。

もしそうでなければ、通常のデバッグを行い、self.nowPlayingが実際のオブジェクトであることを確認してください。今では、再生はIBの正しいラベルに接続されていますか?

+0

self.nowPlayingはnilだったようです。 明らかに、UILabelが決して作成されないように、現在のインスタンスを使用する代わりに、別のインスタンスを作成していました。 ありがとうございました! –

0

は、次のようにあなたのupdateTitle方法を編集してみてください。

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

私はあなたが多くのユースケースではサポートされていないバックグラウンドスレッドでタイトルを更新している感覚を持っています。

関連する問題