【问题标题】:Is it possible to change an NSTimer's userInfo?是否可以更改 NSTimer 的用户信息?
【发布时间】:2011-11-30 04:10:08
【问题描述】:

我有一个NSTimer,它的NSNumber 中有一个userInfo

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

NSTimer 创建并运行了几次之后,我希望能够更改myNumber 的值并让它反映在fireTileAddingToColumn: 中我没有任何运气让它工作.有人有什么建议吗?

【问题讨论】:

    标签: objective-c ios nstimer foundation


    【解决方案1】:

    您始终可以将保存 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】:

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

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

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

      因为NSTimer 不符合该密钥的 KVC 标准。

      【讨论】:

        【解决方案3】:

        NSTimer 的 userInfo 属性并不是一个通用的数据存储工具。它的存在是为了让你的定时器有一些上下文,这样如果多个定时器调用相同的动作,定时器的目标就可以将一个定时器与另一个定时器区分开来。

        【讨论】:

          【解决方案4】:

          懒人的可变userInfo

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

          并访问它:

          timer.userInfo[@"mutable"][@"key"] = <newValue>;
          

          【讨论】:

            猜你喜欢
            • 2015-05-22
            • 1970-01-01
            • 2018-11-17
            • 2016-07-21
            • 1970-01-01
            • 2015-10-04
            • 2012-12-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多