绑定和目标/行动?

时间:2010-02-05 23:46:42

标签: objective-c cocoa binding appkit

我目前有一个颜色井,可以跟踪在NSUserDefaults中保存的颜色。它绑定到NSUserDefaultsController。但是,我也想听取颜色的变化,以便我可以相应地更新我的视图。因此,除了绑定之外,我还向我的首选控制器添加了一个目标/动作到颜色井,该控制器使用颜色发布通知。

1)同时具有目标/动作和绑定的安全性如何?是否存在可能滞后或者可能不同步并报告不同值的可能性?

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

这是我的colorChanged:action:

- (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];

谢谢!

2 个答案:

答案 0 :(得分:3)

  

1)两者的安全性如何   目标/行动和绑定?有没有   一个人可能会滞后或他们的可能性   可能不同步并报告   不同的价值观?

我认为在大多数情况下,应该没问题。最好的方法是测试它。

  

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

你应该肯定,直接从颜色井中获取它。为什么?保存到用户默认值时可能会出现延迟。哎呀,默认设置甚至可以在应用程序终止之前只保存一次,它仍然可以正常运行。 (好吧,这不完全正确,但仍然如此)默认设置的主要目的是在应用程序启动之间保留数据,而不是在应用程序的生命周期内。

答案 1 :(得分:1)

同时具有目标/操作和绑定是安全的。如果使用NSNotificationCenter发布通知,则通知将同步传递给观察者。 (显而易见的警告,它不是魔术 - 如果观察者A在收到通知时向观察者B发送消息,观察者B将不会收到通知。多个线程会进一步增加复杂性。)这在{ {3}}

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