2013-03-18 94 views
3

我使用Cocoa綁定(如Mac上的Objective-C)來使用值轉換器顯示相對日期值。也就是說,我的NSValueTransformer子類的實例NSDate轉換爲NSString顯示相對日期像「3.秒前」,「1分鐘前」等如何強制更新可可綁定?

正如你所看到的,這些顯示的值過舊隨着時間的推移,因此將需要以某種方式刷新。我知道我需要使用計時器,然後強制更新綁定,以便值轉換器得到重新執行並顯示正確的相對日期。

但問題是,我如何讓這些綁定刷新它們的值?

回答

5

如果您使用綁定,那麼GUI應該只要更新你:

  • 都在主線程中更新的值(這樣的綁定可以在GUI時更新)
  • 使用二傳手更新值

所以,如果你是你有綁定到一個對象的foo.zot屬性的值,你需要確保調用[foo setZot: @"new value"]在主線程(或使用設置的[email protected]"new value"財產)。

+0

這些值不需要更新 - 值轉換器需要重新執行。 – adib 2013-03-18 15:48:36

+0

好吧,你沒有改變價值,你只是希望價值轉換器自己更新。該模型不受支持。您將需要在其他地方進行值轉換,並在GUI中放置一個字符串(然後您可以從計時器更新,如上所述)。問題是值本身沒有改變,因此沒有改變通知,並且'NSValueTransformer'不會被重新評估。沒有改變到中間值然後改變它,你將無法重新啓動變壓器。 – gaige 2013-03-18 16:00:58

+0

@ gaige是對的。解決此問題的一種方法是爲派生/轉換的值添加訪問器,並在訪問器中執行模型日期/從模型日期的轉換。然後使用'+ keyPathsForValuesAffectingValueForKey:'(或等效的特定於屬性的命名方法)設置變更通知。請參閱文檔[here](http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVODependentKeys.html) – 2013-03-18 16:12:09