1

メソッドがあるクラス以外のクラスにオブザーバーを追加する方法はありますか? グローバルに追加できるもの。

以下のようなことを試しましたが、うまくいきません。そうする方法をアドバイスしてください。これは HomeVC.m にあります。このクラスからの通知も投稿しています。

UIStoryboard *storybrd = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
HomeViewController *controller =[storybrd instantiateViewControllerWithIdentifier:@"VC123"];

[[NSNotificationCenter defaultCenter] addObserver:controller selector:@selector(somethingHappens:) name:@"notificationName" object:nil];

このメソッドは VC123.m にあります

-(void) somethingHappens:(NSNotification*) 通知 { }

4

1 に答える 1

0

あなたがするとき:

HomeViewController *controller =[storybrd instantiateViewControllerWithIdentifier:@"VC123"];

コントローラーの新しいインスタンスを取得します。初めてで、そのインスタンスを保持して再利用する場合は問題ありません。しかし、おそらくあなたがしていることは、それを維持していないため、破壊されています. これは通常、クラッシュを引き起こします (コントローラーが破棄される前にオブザーバーとして自分自身を削除している場合を除きます)。

任意のインスタンスをオブザーバーとして追加できます。特にクラス内からのものである必要はありません。インスタンスが必要なだけです。そのインスタンスは、作成したばかりの新しいインスタンスではなく、既存のものである必要があります。

于 2013-07-21T06:37:06.547 に答える