在iOS 6.1上,UISwitch IBOutlet始终为零

时间:2013-02-04 13:17:54

标签: ios objective-c cocoa-touch

我在静态UITableView上使用UISwitch时遇到了一些麻烦。 我必须在应用程序加载时恢复某个UISwitch的最后一个状态,但每当我检查IBOutlet的状态时,它都是零。我试图手动分配变量,这也无济于事。

这是我正在做的事情:

SettingsController.h

//IBOutlet connected correctly
@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail;

SettingsController.m

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (!_switch_displayDetail) {
        NSLog(@"_switch_displayDetail is NIL"); //This is always displayed
    }

    //Switch is default to YES, I am trying to set it to NO
    //This line does nothing...
    [_switch_displayDetail setOn:[dataManager shouldDisplayDetail] animated:YES];
}

当我检查_switch_displayDetail的状态时,其他任何地方都是零。我正在调用所有超级初始化方法。 iOS 6.1上有什么变化吗?

[编辑]使用合成变量也不起作用。

[编辑2]发现问题是Xcode或iPhone模拟器上的错误。在我的iPod touch上测试后,初始算法运行得很好。

我对此问题感到疯狂......

3 个答案:

答案 0 :(得分:1)

我亲自了解那些 Twilight zone 问题是多么令人沮丧。显然,诊断的信息太少,但我想我会分享如何进行调试。

  1. 覆盖switch_displayDetail的setter,在那里记录值,同时记录self
  2. 然后在viewWillAppear中记录相同的内容
  3. 我有一种感觉,我们不是在谈论同一个实例。如果我是对的,那么setter会显示一个值,但不会显示viewWillAppear。如果我错了,那么两者都将是零,在这种情况下,要么你没有调用正确的init方法,要么你的联系在IB中不正确。

    只是我的两分钱。

答案 1 :(得分:1)

感谢大家的回答,但几乎放弃后,我在iPod touch上测试了我的应用程序,它运行得很好。这看起来像是iPhone模拟器上的一个错误,或者很可能是Xcode上的一个错误(这里没什么新东西)。重置iPhone模拟器菜单上的所有设置和数据后,它也在那里工作。

所以,在疯狂之前,在真实设备上测试您的应用

答案 2 :(得分:-1)

第一:

@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail; // should be a weak property

然后你有@synthesized你的财产?