2013-03-18 93 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