実行するNSNotificationCenterのセレクタメソッドreceiveChatTextを取得できません。NSNotification postNotificationNameがAppDelegate.mにあり、NSNotificationCenterがViewController.mにあるために問題が発生しているのでしょうか? I. postNotificationNameは、NSNotificationCenterが別のviewControllerファイルにあることを知ることができますか、それとも私はそれを伝える必要がありますか?AppDelegateのNSNotification postNotificationNameは、ViewControllerのNSNotificationCenterですか?
-(void) didReceiveMessage {
[[NSNotificationCenter defaultCenter] postNotificationName:ChatMessageReceived
object:nil
userInfo:nil];
}
ときdidReceiveMessage実行されてからreceiveChatTextを止めることができるものの任意のアイデア:私は
-(id)init
{
self = [super init];
if(self){
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveChatText:)
name:ChatMessageReceived
object:nil];
return self;
}
- (void)receiveChatText:(NSNotification *)note {
NSLog(@"received chat text");
}
を持っているし、トップレベルのAppDelegate.mファイルで、私は次のように持っているviewController.mで
と呼ばれる?
#2が問題でした。以前は、initWithNibNameを使用してanother_viewController.mからviewController.mを作成しました。私が投稿したとき、viewController.mの中にinitがありました。だから私は最初のinitWithNibNameが後のinitをオーバーロードすると思います。ですから、私はanother_viewController.mからviewControllerを作成しました。ちょうどinitを使っていました。ありがとう! –
@James:いいえ、 'initWithNibName:bundle:'は 'init'をオーバーライドしませんでした。繰り返しますが、メッセージの観点から考える必要があります。あなたのサブクラスで 'init'を実装(オーバーライド)するのは、何かが' init'メッセージを送ることでオブジェクトを初期化するときだけです。オブジェクトに 'initWithNibName:bundle:'メッセージを送るとき、そのメッセージが代わりに 'init'実装を打つことを期待する理由はありません。 'initWithNibName:bundle:'を使用して作成する場合、それを実装する必要があります。 'init'を使ってそれを作成するなら、それを実装する必要があります。使用するイニシャライザ(またはイニシャライザ)を実装する必要があります。 –