0

こんにちは、奇妙な問題があります。

私のMainViewControllerクラスでは、ボタンが押されるたびに通知を投稿します

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

クラスでは、私はオブザーバーを持っています

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(step) name:@"step" object:nil];

「ステップ」メソッドを実行します

- (void)step {
    NSLog(@"works");
}

Slide1ViewControllerと呼ばれる別のクラスには、オブザーバーもあります

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        NSLog(@"works 2");

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(step) name:@"step" object:nil];
    }
    return self;
}

そして dealloc メソッドはそれを削除します

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"step" object:nil];
}

MainViewController ではメソッドが呼び出されますが、Slide1ViewController では呼び出されません。

Slide1ViewController は次のように初期化されます。

Slide1ViewController*test = [[Slide1ViewController alloc] initWithNibName:@"Slide1ViewController" bundle:nil];
test.view.frame = CGRectMake(1024*0, 0, 1024, 768);
[contentScrollView addSubview:test.view]; 
4

2 に答える 2

0

通知を投稿する前に両方のオブザーバーを登録する必要があるため、通知を投稿する前に Slide1viewcontroller をメモリ内で初期化する必要があります。

于 2012-07-27T11:46:27.600 に答える
0

@Phillip Millsに感謝します。正しかったので、MainViewControllerの@propertyとして宣言する必要がありました!!! この問題は私を夢中にさせていました。

于 2012-07-27T11:50:26.867 に答える