2011-11-30 90 views
1

我有了在NSNumberNSTimeruserInfo是否可以更改NSTimer的userInfo?

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

创建后的NSTimer,并已运行了好几次,我希望能够改变的myNumber值,并将它反映fireTileAddingToColumn:我还没有得到这个工作的运气。有没有人有什么建议?

回答

3

你总是可以传递一个对象保持用户信息的定时器:

@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>; 
相关问题