我想知道您的意見是什麼是最好的方法來做到這一點。iOS最佳實踐 - 更新父視圖集合中的對象
我有一個視圖控制器(EventsController)與UITableView。它從後端應用程序獲取事件數據並將它們存儲在實例變量events(NSArray)中。它使用events數組填充表視圖。
當用戶點擊表格中的某一行時,它們被帶到另一個視圖控制器(EventDetailController)。在segue期間,EventDetailController傳遞選定的事件對象。 細節控制器讓用戶關注或取消關注此事件。當用戶關注/取消關注將信息發送到後端的事件時。目前在從後端接收到成功響應之後,詳細控制器發佈通知,讓觀察員知道事件發生了變化。 EventsController觀察此通知,並在獲取通知時重新加載自身(從後端獲取所有事件並重新加載表)。我認爲這是過度的(順便說一下,這個通知也被EventsController以外的視圖使用,我認爲這就是爲什麼他們會使用通知而不是協議/委託)。
我的問題是關於如何在EventsController中更新已更改的事件而不需要到後端。 請注意,兩個控制器均位於導航控制器內。
- 在segue期間,將所選事件對象傳遞到詳細控制器 ,正如現在所做的那樣。來自後端的成功響應 的詳細控制器更新這個非常事件對象。所以事實上,EventsController中事件數組中的對象 將被更新。 EventsController可以在 viewWillAppear中觸發表格的重新加載,並且當用戶 導航回到EventsController時,反映將會反映出來。
- 使用協議/委託方法讓EventsController知道 事件被關注或取消關注。
- a。在調用協議方法的EventsController中,查找數組中的事件(它們具有唯一的ID 屬性),更新它並重新加載表。
- b。或者在EventsController中不僅維護一個事件數組,而且還維護一個字典(鍵將事件ID和值將是該事件數組中的 對象的索引)協議方法被調用,它可以查看 上找到事件更快在數組中並更新它。並致電 重新加載表。
你會用哪種當前方法,1,2.A或2.B?謝謝。
啊,這是一個很好的解決方案。當你說模型時,你不一定是核心數據,是嗎?該模型可以是一個單數表示所有事件的數組? EventsController可以將選定的事件索引傳遞給細節控制器。 – septerr
不需要核心數據。只是一個具有一系列事件的類,您可以根據需要修改/觀察事件。 – jsd