[英]How to update grandparent table view
我正在使用多視圖控制器方案,用戶可能會更改最深視圖中顯示的值。 假設A是第一名,B是第二名,C是第三名。
在C中使用導航欄返回到B時,必須在A中執行表重新加載。 (表很小,所以我不必費心去優化只更新一行)。
使用一個協議,我想C應該提供一個協議,而A可以使用一個委托在諸如someRowIsUpdated之類的函數中執行它。 我認為缺點是A應該包含C的標頭才能知道該協議。 當添加其他控制器(例如同級控制器)時,必須更新A的來源,並添加一個額外的包含。 這對我來說似乎是錯誤的方式。
另一種選擇是在實例化B時從A向下傳遞一些id,而在B實例化C時從C向下傳遞一些id。對我來說,這似乎也很笨拙。
當C想要通知A做某事時,最好的方法是什么? 通知? 我希望C包含A的標頭,而不是相反。
有什么想法嗎?
我認為,通知確實確實是這里最重要的解決方案。 如果以后要更改某些內容,它也為您提供了很好的靈活性。
這是核心數據,您必須謹慎對待通知。 原因是由於基礎持久性存儲的某些鎖定機制,不應在多個線程上使用核心數據。
因此,為了方便起見,我建議沿控制器鏈傳遞唯一的NSManagedObjectContext
,以及適當的NSManagedObject
子類。 如果您有權訪問數據模型,則無需引用父控制器或與之通信。 這也是一種更好的設計模式。
您會發現, #importing
類和聲明屬性的幾行代碼最終將遠遠少於處理通知。 (恕我直言,也遠不那么“笨拙”。;-))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.