2010-02-05 79 views
0

我目前有一个很好的颜色,可以跟踪保存在NSUserDefaults中的颜色。它绑定到一个NSUserDefaultsController。但是,我也想要听取颜色的更改,以便相应地更新我的视图。因此,除了绑定之外,我还向目标/动作添加了颜色,以便将我的偏好控制器用颜色发布通知。绑定和目标/操作?

1)目标/动作和绑定有多安全?是否有可能会滞后或者他们可能不同步并报告不同的值?

2)当我在我的IBAction方法中获取颜色时,是否应该从用户默认值或颜色中获得颜色?

这里是我的colorChanged:动作:

- (IBAction)colorChanged:(id)sender 
{ 
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[colorWell color] forKey:@"color"]; 
[notificationCenter postNotificationName:@"ColorChangedNotification" object:self userInfo:userInfo]; 
} 

所以我应该这样做:

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"color"]]; 

或:

[colorWell color]; 

谢谢!

+0

你怎么得到colorChanged行动?我无法为TableViewCell中的元素获取任何操作 – sheetal 2014-07-31 09:53:11

回答

3

1) 目标/动作和绑定有多安全?有没有 的可能性,一个可能会滞后或他们 可能不同步和报告 不同值?

我觉得大部分应该没问题。最好的办法是测试一下。

2)当我在我的IBAction方法中获取颜色时,是否应该从用户默认值或颜色中获得颜色?

你应该绝对,绝对直接从颜色得到它。为什么?保存到用户默认值时可能会有滞后。哎呀,在应用程序终止之前,默认设置甚至可以只保存一次,它仍然没问题。 (好吧,这并不完全正确,但仍然)默认的主要目的是在应用程序启动之间保持数据,而不是在应用程序的生命周期中。

1

目标/操作和绑定都是安全的。如果使用NSNotificationCenter发布通知,则通知将同步传递给观察者。 (明显的警告是它不是魔术 - 如果观察者A在获得通知时向观察者B发送消息,则观察者B将不会收到通知,多线程会增加复杂性。)这在the documentation for NSNotificationCenter.中被调出

直接从颜色中直接读取颜色很快,而且从IBAction中很可能没有问题。如果您在应用程序启动时运行代码,则最好从用户默认值中读取,因为色彩的绑定可能尚未更新。