2010-02-05 32 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中很可能沒有問題。如果您在應用程序啓動時運行代碼,則最好從用戶默認值中讀取,因爲色彩的綁定可能尚未更新。