2011-10-09 100 views
0

我正在處理多視圖控制器方案,用戶可能會更改最深的視圖中顯示的值。說A是頂部,B是第二,C是第三。如何更新祖父母表視圖

當使用C中的導航欄返回到B時,必須執行A中的表重新加載。 (表格很小,所以我不打擾優化只更新一行)。

使用一個協議,我想C應該提供一個協議,A可以使用一個委託來執行一個函數,如'someRowIsUpdated'。我認爲缺點是A應該包含一個C的頭部以瞭解該協議。當添加一些其他控制器時,說一些兄弟姐妹,必須更新A的來源,添加一個額外的包含。這對我來說似乎是錯誤的。

另一種方法是在B實例化C時實例化B和C時,從A向下傳遞一些id。這對我來說似乎也很笨拙。

當C想通知A做某事時,最好的方法是什麼?通知? 我寧願讓C包含來自A的頭部,而不是相反。

有什麼想法?

回答

1

我認爲,通知確實似乎是最重要的解決方案。如果您稍後想要更改某些內容,它也爲您提供了很好的靈活性。

0

這是核心數據,你必須小心通知。原因是核心數據不應該在多個線程上使用,因爲基礎持久性存儲的某些鎖定機制。

因此,我會建議通過一個獨特的NSManagedObjectContext下來的控制器鏈,甚至適當的NSManagedObject子類爲了方便。如果您有權訪問數據模型,則無需引用父控制器或與其通信。這也是一個更好的設計模式。

你會發現#importing類的幾行代碼和聲明屬性最終遠遠少於處理通知。 (恕我直言,也不太「笨拙」;-))

+0

控制器A,B和C在主線程中。當使用CoreData(的確如此)時,同一個線程中的對象具有相同的ManagedObjectContext是真的嗎?正確。 – Clemens

+0

正確。這是Apple在其演示應用程序中使用的設計模式。 – Mundi