我有一个带有NSLevelIndicator对象的应用程序,该应用程序拒绝更新。

我有一个计时器,该计时器在初始化过程中被取消,并使用其setIntValue方法更新NSLevelIndicator的值。尽管代码无任何例外地执行,但NSLevelIndicator从未进行视觉更新。我在窗口上还有一些其他标签正在通过此计时器更新,因此我知道它正在执行。

我试过使用所有setTypeValue方法(字符串,直接值和带有在每个变量中分配的适当变量的double值)。我什至尝试通过接口构建器将“ setStringValue”操作从NSLevelIndicator链接到窗口上的标签表示,但无济于事。它仍然位于其初始值(0)。

我注意到setIntValue(以及所有其他setTypeValue方法)在Apple的NSLevelIndicator文档中没有记录-所以我想知道我是否正在解决这个错误。

有谁知道通过代码设置NSLevelIndicator值的正确方法是什么?

最佳答案

setIntValue应该可以工作,所以听起来好像您的NSLevelIndicator的IBOutlet设置不正确-最有可能其值为nil。

正如Johan Kool建议的那样,这可能是由于您的插座未在IB中连接。

但是,值得一提的是,在调用初始值设定项时,IBOutlets还没有有效的值-它们在初始值设定项返回后就被钩住,并且直到您的实例收到awakeFromNib消息后才应引用它们。 。

您提到了您的计时器是通过初始化程序设置的-如果您碰巧将实例的NSLevelIndicator指针作为其userInfo参数传递给计时器,则userInfo的值(nil)将是错误的,因为在计时器为0时尚未初始化创建。

不管您是否以这种方式使用userInfo,任何依赖IBOutlet值的内容都应在awakeFromNib而不是init中进行设置。

关于cocoa - NSLevelIndicator未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2394323/

10-13 05:31