【问题标题】:Unexpected Delay in Controller控制器中的意外延迟
【发布时间】:2011-09-23 05:43:32
【问题描述】:

我有一个方法,它通过初始化另一个类的实例来获取另一个类的 IBOutlet,然后运行使用对 IBOutlets 的引用在另一个应用程序中设置内存地址的代码。代码运行良好,但由我设置为每 5 秒刷新一次的计时器定期更新。问题是每 5 秒内存地址会周期性地更改为错误的值,然后再变回正确的值。这是我的基本代码:

#define OFF 0
#define ON 1
- (void)onOff:(id)sender {
    if ([[appDelegate buttonOutletName] state] == ON) {
        [helper setIntForAddress:0xFFFFFF value:1];
    }
    if ([[appDelegate buttonOutletName] state] == OFF) {
        [helper setIntForAddress:0xFFFFFF value:0];
    }
}

问题是,每当我从按钮以外的任何地方调用此代码(例如 [self onOff:self]; )时,它都会短暂地将值设置为 0,然后再设置为 1。我的代码在内部实现时运行良好应用程序控制器;但是,现在它可以工作但出现此错误。如果有人可以帮助我,将不胜感激。 谢谢。

【问题讨论】:

  • 这个setIntForAddress:value: 方法有什么作用?它会改变[[appDelegate buttonOutletName] state] 的值吗?

标签: objective-c xcode memory nsbutton


【解决方案1】:

我想这个方法被调用了两次。你确定你只调用一次吗?检查 Instruments 应用,看看它是否确实被调用了两次。

【讨论】:

    【解决方案2】:

    我觉得setIntForAddress:value:方法改变了[appDelegate buttonOutletName] state]的值。如果是这样,只需将两个 if 语句 转换为单个 if-else 块。

    if ([[appDelegate buttonOutletName] state] == ON) {
        [helper setIntForAddress:0xFFFFFF value:1];
    } else if ([[appDelegate buttonOutletName] state] == OFF) {
        [helper setIntForAddress:0xFFFFFF value:0];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多