2011-11-30 31 views
1

私はNSTimerが作成され、数回実行した後、そのuserInfoNSTimerのuserInfoを変更することはできますか?

fireTimer = [NSTimer scheduledTimerWithTimeInterval:6.0 
              target:self 
              selector:@selector(fireTileAddingToColumn:) 
              userInfo:myNumber 
              repeats:YES]; 

NSNumber、私はmyNumberの値を変更できるようにしたいと思いましたし、それが中に反映されているNSTimerを持っています私はこれを稼働させる運がなかった。誰にも何か提案はありますか?

答えて

3

あなたは常にタイマーへのUserInfoを保持しているオブジェクトを渡すことができます。

@interface Holder 
@property id data; 
-(id) initWithData: (id) data; 
@end 

// implement it 

Holder *holder = [[Holder alloc] initWithData:myNumber]; 
fireTimer = [NSTimer scheduledTimerWithTimeInterval:6.0 target:self 
      selector:@selector(fireTileAddingToColumn:) holder 
       repeats:YES]; 

[Holder setData: myNumber2]; 

やデータ変更がセレクタに

3

新しいタイマーを作成することをお勧めします。クラスがその属性を変更するためのインタフェースを提供していない場合は、それを非公開および読み取り専用とみなす必要があります。

それはKVCを使用して、その周りに通常のエンドランを行うために、この場合にも、不可能です。

[timer setValue:newNumber forKey:@"userInfo"]; 

NSTimerがKVCに準拠し、そのキーのためではないので。

2

を反映されますNSTimerのユーザ情報プロパティがあることを意図していません汎用データ記憶装置である。複数のタイマーが同じアクションを呼び出す場合は、タイマーのターゲットが別のタイマーと区別できるように、タイマーに沿ったコンテキストを持つことができます。

1

怠惰な人々の可変userInfo

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:6.0 
             target:self 
             selector:@selector(fireTileAddingToColumn:) 
             userInfo:@{@"mutable": [@{@"key": <value>} mutableCopy] 
             repeats:YES]; 

そしてそれにアクセスするには:

timer.userInfo[@"mutable"][@"key"] = <newValue>; 
関連する問題