我的NSTimer
NSNumber
中有一个userInfo
fireTimer = [NSTimer scheduledTimerWithTimeInterval:6.0
target:self
selector:@selector(fireTileAddingToColumn:)
userInfo:myNumber
repeats:YES];
创建NSTimer
并运行了几次之后,我希望能够更改myNumber
的值并将其反映在fireTileAddingToColumn:
我还没有运气好的任何运气。有没有人有任何建议?
答案 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>;