我有一个带有NSLevelIndicator对象的应用程序,它拒绝更新。
我有一个在init期间被推开的计时器,并使用其setIntValue方法更新NSLevelIndicator的值。虽然代码执行时没有任何异常,但NSLevelIndicator永远不会在视觉上更新。我在窗口上有一些其他标签 通过这个计时器进行更新,所以我知道它正在执行。
我尝试过使用所有setTypeValue方法(String,直值和double,并在每个方法中分配适当的变量)。我甚至尝试通过NSLevelIndicator中的接口构建器将“setStringValue”操作链接到窗口上的标签表示无效。它仍处于初始值(0)。
我注意到在Apple的NSLevelIndicator文档中没有记录setIntValue(和所有其他setTypeValue方法) - 所以我想知道我是否接近这个错误。
有没有人知道从代码中设置NSLevelIndicator值的正确的方式是什么?
答案 0 :(得分:3)
setIntValue
应该有效,所以听起来你的NSLevelIndicator的IBOutlet没有正确设置 - 很可能它的值是零。
这可能是由于您的插座没有在IB中连接,正如Johan Kool建议的那样。
然而,有一点值得一提的是,IBOutlets在调用初始化程序时还没有有效值 - 它们在初始化程序返回后被连接起来,并且在您的实例收到{之前不应该被引用{1}}消息。
您提到您的计时器是从初始化程序设置的 - 如果您碰巧将实例的NSLevelIndicator指针作为其userInfo参数传递给计时器,则userInfo将具有错误的值(nil),因为它尚未初始化时计时器已创建。
无论您是否以这种方式使用userInfo,都应该在awakeFromNib
而不是awakeFromNib
内设置任何依赖于IBOutlet值的内容。