2010-03-06 62 views
1

我有一個NSLevelIndicator對象的應用程序拒絕更新。NSLevelIndicator不更新

我有一個計時器在初始化期間關閉,並使用它的setIntValue方法更新NSLevelIndicator的值。雖然代碼無任何例外地執行,但NSLevelIndicator從未在視覺上更新。我在窗口上有一些其他標籤,通過這個計時器更新,所以我知道它正在執行。

我試過使用所有的setTypeValue方法(字符串,直接值和雙與適當的變量被分配在每個)。我甚至嘗試將通過NSLevelIndicator的接口生成器的「setStringValue」操作鏈接到窗口上的標籤表示,但無濟於事。它仍然處於初始值(0)。

我注意到,setIntValue(和所有其他setTypeValue方法)在蘋果NSLevelIndicator的文檔中沒有記錄 - 所以我想知道如果我接近這個錯誤。

有沒有人有任何線索什麼正確的方式來設置NSLevelIndicator的代碼的值是?

+1

你確定你的插座連接正確嗎? – 2010-03-06 22:31:49

+0

就是這樣。你能否將它作爲答案彈出來,以便我可以給你信任(因爲你是第一個)? – 2010-03-07 01:03:15

回答

3

setIntValue應該工作,所以它聽起來像NSLevelIndicator的IBOutlet設置不正確 - 很可能它的值爲零。

這可能是由於您的插座沒有連接到IB,正如Johan Kool所建議的。

但有一點值得一提的是,IBOutlets在初始化程序調用時尚未具有有效值 - 它們在初始化程序返回後掛鉤並且不應被引用,直到實例接收到awakeFromNib消息。

您提到您的計時器是從您的初始化程序設置的 - 如果您恰好將實例的NSLevelIndicator指針作爲其userInfo參數傳遞給計時器,則userInfo將具有錯誤的值(零),因爲它尚未初始化當定時器被創建時。

無論您是否使用userInfo這種方式,任何依賴於IBOutlet值的應該從awakeFromNib而不是init設置。

+0

這確實是沒有聯繫的渠道(正如Johan指出的那樣)。謝謝你提出這個建議。我剛剛開始了OSX的開發,所以我還不太習慣於拖延網點。 同樣謝謝您的詳細解答,包括網點的初始化順序。我將爲未來記住這一點。 – 2010-03-07 01:05:25