0
- (void) setNeededValue:(valueType)newValue;
{
    neededValue = newValue;

    if( neededValue > threshold )
    {
        [[NSNotificationCenter defaultCenter] postNotificationName: @"setNeededValue" object: self];
    }
}

//////////////////

-(void)callfunction{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setNeededValue) name:@"setNeededValue" object:nil];

NSLog(@"sam: %d,100);
}

setNeededValue が呼び出され、通知の呼び出しに問題がありますか? しきい値条件に達すると、関数 callfunction が呼び出されます... :( これには少し新しいですか? 助けてください!!

前もって感謝します!:)

4

1 に答える 1

0

おそらく問題は、間違った場所で通知のオブザーバーとして自分自身を設定していることです。

callfunction 内の通知のオブザーバーになります (しきい値に達したときに呼び出されます)。

オブザーバーは、オブジェクトまたはビューがインスタンス化されるときに 1 回だけ追加する必要があります。そして、取り除かれたら取り除かれます。

そのため、addObserver を init に移動します (または、viewDidLoad メソッドのビュー コントローラー内にいる場合)。

クリスチャンが指摘したように、これは以下の問題ではありません

[[NSNotificationCenter defaultCenter] postNotificationName: @"setNeededValue" object: self]; を置き換えます。[[NSNotificationCenter defaultCenter] postNotificationName: @"setNeededValue" オブジェクト: nil]; 通知センターはpostNotificationから渡されたオブジェクトをチェックし、オブザーバーを見て、一致する場合は呼び出され、そうでない場合は呼び出されないため、動作するはずです。あなたの場合、 objectselfで Notification を投稿しますが、 addObserver には object がありますnil

于 2012-06-18T14:19:13.293 に答える