我有應用程序與iOS7中的文檔。我正在使用核心數據來管理每個文檔中的數據,並查看控制器以使用導航來編輯此文檔。在文檔編輯視圖中,您可以找到很多帶有顏色線條或形狀的元素,當我在拾色器中更改參數時,需要更改所有這些元素。如何將相同的數據發送到不同視圖或視圖控制器中的多個對象?
將數據分配給每個元素的最佳方法是什麼?我應該使用代表,但這是多方通話。我應該使用單身嗎?塊?或者只是將所有元素指向一個顏色對象,但是如何在XCode中執行此操作?
我有應用程序與iOS7中的文檔。我正在使用核心數據來管理每個文檔中的數據,並查看控制器以使用導航來編輯此文檔。在文檔編輯視圖中,您可以找到很多帶有顏色線條或形狀的元素,當我在拾色器中更改參數時,需要更改所有這些元素。如何將相同的數據發送到不同視圖或視圖控制器中的多個對象?
將數據分配給每個元素的最佳方法是什麼?我應該使用代表,但這是多方通話。我應該使用單身嗎?塊?或者只是將所有元素指向一個顏色對象,但是如何在XCode中執行此操作?
如果這些視圖是自定義對象,請使用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];
}
你有很多選擇。這裏有一些。
NSNotification
團
KVO(密鑰值觀察)
IBOutletCollection
枚舉的集合。
每個人都有權衡和好處。
在你的幫助下,我找到了關於何時使用這些選項的好文章。如果有人想知道更多,請閱讀這裏:[鏈接](http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/) – edukulele
如果您將通知註冊到類實例,請不要忘記在'dealloc'中添加'[[NSNotificationCenter defaultCenter] removeObserver:self]',因爲NSNotificationCenter會爲每個註冊的觀察者保留'unsafe_unretained'指針。 – John
感謝您快速回答santhu並感謝提及關於內存管理的約翰。我會將這個答案作爲接受的答案來檢查。再次感謝。 – edukulele