是否可以更改NSTimer的userInfo?

时间:2011-11-30 04:10:08

标签: objective-c ios nstimer foundation

我的NSTimer NSNumber中有一个userInfo

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

创建NSTimer并运行了几次之后,我希望能够更改myNumber的值并将其反映在fireTileAddingToColumn:我还没有运气好的任何运气。有没有人有任何建议?

4 个答案:

答案 0 :(得分:3)

你最好创建一个新的计时器。如果类没有提供用于更改该属性的接口,那么您应该将其视为私有和只读。

在这种情况下甚至不可能使用KVC进行通常的结束:

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

因为NSTimer与该密钥不符合KVC。

答案 1 :(得分: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];

,数据更改将反映在选择器

答案 2 :(得分:2)

NSTimer的userInfo属性不是通用数据存储工具。它就在那里你可以有一些上下文与你的计时器一起使用,这样如果多个计时器调用相同的动作,计时器的目标可以区分一个计时器。

答案 3 :(得分: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>;