0

私は仕事に就こうとしてきNSNotificationました。テストのために、storyBoards を使用して新しい viewController をロードするボタンが必要でした。ボタンをクリックすると、appObserver が 2 番目の ViewController (Page2 という名前を付けました) で取得するための通知がトリガーされます。Page2 では、NSNotificationCenterメソッド (myMethod:) を起動し、単純なNSLog. 残念ながら、myMethod が呼び出されないため、機能しません。私は何を間違っていますか???

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (IBAction)goToPage2Button:(id)sender {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:nil];

}

#import "Page2.h"

@interface Page2 ()

@end


@implementation Page2

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
       [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(myMethod:) name:@"test" object:nil];


    }
    return self;
}

-(void)myMethod:(NSNotification *)notification{


    if ([[notification name] isEqualToString:@"test"])
        NSLog (@"Successfully received the test notification!");


}
4

2 に答える 2

4

ストーリーボードを使用する場合、initWithNibName通常は呼び出されません。を使用していますinitWithCoder。オブザーバーを追加するコード行にたどり着いていますか?

コードの一部の行が呼び出されていないように見える動作が発生した場合は、そこにブレークポイントを配置するか、NSLogそれを確認することをお勧めします。

于 2012-11-24T15:29:54.363 に答える
1

これは、通知が発生したときに page2 View Controller が存在しないことが原因である可能性があると思います。

2 番目のビュー コントローラーは、ペン先から復帰したときに監視用に登録しますが、作成されていない場合は、最初のビュー コントローラーが送信する通知に登録されていません。

あなたがすべきことは、セグエを使用して、アクションに基づいてView Controllerをロードすることです。

于 2012-11-24T15:19:06.190 に答える