2013-02-22 55 views
1

我的應用程序使用默認系統存儲上次數據更新的日期&。OS X如何在日期更改時更新相對日期顯示?

我的窗口有一個與該值綁定的文本框。該文本框還附有日期格式化程序。全部通過Interface Builder完成。日期格式設置爲使用相對日期。

數據只在白天進行更新,每當新數據到達時文本字段完全更新。所以我得到的是這樣的:

今天09:30 今天09:35 今天09:40 ... 今天17:40

17:40將是最後的數據更新天。

問題是,一旦它變成午夜,它仍然會說今天17:40,當它應該說昨天17:40。

如果我退出並重新打開應用程序,它會顯示昨天17:40。

我想我需要告訴一些刷新,但我不知道什麼,我無法找到一個例子。

1)顯然你可以發送假的willChangeValueForKey和didChangeValueForKey通知,但很多人說這是不正確的。

2)我已經嘗試在午夜後將用戶默認值設置爲自己,但這並未觸發更改。

3)我已經嘗試將用戶默認值設置爲零然後在午夜之後回來,但是這也不起作用。

我確定有一個正確和簡單的方法來做到這一點,但我找不到它。

我需要觸發什麼? 我需要觸發哪個對象?

非常感謝。

回答

0

你需要使用定時器來更新顯示...做這樣的事情:

(在viewDidLoad中,可能)

[NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(refreshDisplay) userInfo:nil repeats:YES]; 

...那麼你只要建立一個新的方法,刷新你的時間字段

- (void)refreshDisplay { 
    // do something to refresh your text label based on relative date 
} 
+0

我已經得到了NSTimer的正常工作 - 在午夜每天都會發生火災(並更新其他一些東西)。我有一個類似的方法(midnightUpdates)像你的建議。我仍然不確定的是做什麼實際刷新? – jb8748 2013-02-22 18:46:08

+0

你有爲你的文本框設置的插座嗎?也許一個'[yourTextbox setNeedsDisplay]'可以做到這一點。 – 2013-02-22 21:10:31

+0

我已經做了一些更多的調查,午夜之後值會自動更改,但不會自動調用NSTextField上的顯示。只有在下次發生重新顯示時纔會更新 - 例如正在激活的窗口。 所以你是對的@James Boucher - 如果你想立即反映在UI中,那麼你必須做[yourTextBox顯示]。這是NSTextField需要做的事情 - 無需發送KVO更新或更改NSDateFormatter。 – jb8748 2013-02-23 15:11:35

1

1)顯然,你可以發送僞造willChangeValueForKey和 didChangeValueForKey通知,但很多人說這是不正確的 。

我會說你可以用這種方式。這種方式沒什麼不好的。