2014-01-30 47 views
0

我有應用程序與iOS7中的文檔。我正在使用核心數據來管理每個文檔中的數據,並查看控制器以使用導航來編輯此文檔。在文檔編輯視圖中,您可以找到很多帶有顏色線條或形狀的元素,當我在拾色器中更改參數時,需要更改所有這些元素。如何將相同的數據發送到不同視圖或視圖控制器中的多個對象?

將數據分配給每個元素的最佳方法是什麼?我應該使用代表,但這是多方通話。我應該使用單身嗎?塊?或者只是將所有元素指向一個顏色對象,但是如何在XCode中執行此操作?

回答

2

如果這些視圖是自定義對象,請使用NSNotificationCenter
創建通知並將所有其他視圖設置爲此通知的觀察者。當您在字典中觸發通知設置顏色值時,所有觀察者(視圖)都會獲取此字典。

現在,在選擇器方法中相應地更改顏色值。

代碼 - >
對於所有您想要改變顏色,將其添加作爲觀察員我們的通知名爲「changeColor」

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(colorChange:) name:@"changeColor" object:nil]; 

而改變顏色值特定顏色的意見在所有視圖中,消防通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:nil userInfo:@{@"finalColor": [UIColor redColor}]; 

這導致所有的觀察員SEL(colorChange)通話。

-(void)colorChange{ 
    NSDictionary *userInfo =notification.userInfo; 
    view.backgroundColor =userInfo[@"finalColor"]; 
} 

dealloc刪除觀察者,

-(void)dealloc{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 
+2

如果您將通知註冊到類實例,請不要忘記在'dealloc'中添加'[[NSNotificationCenter defaultCenter] removeObserver:self]',因爲NSNotificationCenter會爲每個註冊的觀察者保留'unsafe_unretained'指針。 – John

+0

感謝您快速回答santhu並感謝提及關於內存管理的約翰。我會將這個答案作爲接受的答案來檢查。再次感謝。 – edukulele

0

你有很多選擇。這裏有一些。

NSNotification

KVO(密鑰值觀察)

IBOutletCollection

枚舉的集合。

每個人都有權衡和好處。

+0

在你的幫助下,我找到了關於何時使用這些選項的好文章。如果有人想知道更多,請閱讀這裏:[鏈接](http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/) – edukulele

相關問題