1

我有一个方法通过初始化另一个类的实例来获取另一个类的 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。我的代码在应用程序控制器中实现时运行良好; 但是,现在它可以工作但出现此错误。如果有人可以帮助我,将不胜感激。谢谢。

4

2 回答 2

0

我觉得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];
}
于 2011-09-23T06:02:49.673 回答
0

我想该方法以某种方式被调用了两次。你确定你只调用一次吗?检查 Instruments 应用程序,看看它是否确实被调用了两次。

于 2011-09-23T05:48:00.097 回答