2011-04-05 71 views
1

我有一個正在工作的應用程序,但我不滿意,因爲我已經找到了最好的(或最簡單的)解決方案。該應用程序具有單個數據庫,其中包含許多具有典型一對多引用的表格。迄今爲止很好,沒有什麼不尋常的。iPhone設計:單個數據源的多個桌面視圖

該應用程序有3個選項卡,每個可以顯示一個表中的記錄列表。如果用戶觸摸表格行,則選項卡上的導航視圖會按下新的表格視圖來顯示詳細信息。想想你的地址簿,你就明白了。

在記錄的詳細信息視圖中,我已獲取包含指向其他表中記錄的鏈接的部分。所以觸摸一個將導航到該記錄,改變到適當的選項卡。

棘手的一點是編輯記錄時,因爲它會影響顯示在另一個選項卡上的數據。最初我根據核心數據保存的通知發送的核心數據更改來查看對錶視圖的更新。但是,我發現,根據這種方式確定需要對錶格視圖進行哪些更改太困難且不可靠。主要是因爲我沒有一個前後數據圖來比較。因此,當核心數據保存發生時,表視圖只是記住它們的後備數據可能已受到影響,並且會在下次顯示時完全重新加載。

雖然我的系統爲保持數據在表視圖中保持同步,但我確定必須有更好的方法。我正在考慮KVO是否可以成爲更好的選擇,使用表視圖控制器跟蹤數據圖中的各個字段和對象,以便他們能夠響應由其他表視圖觸發的精確更改。核心數據通知方法對於需要微妙點擊的問題有點像錘子方法。

別人怎麼處理這類問題?

回答

2

您的困惑是由於您試圖以SQL /關係數據庫術語思考覈心數據而引起的。

核心數據不是SQL。實體不是表格。對象不是行。列不是屬性。核心數據是一個對象圖管理系統,它可能會或可能不會持久化對象圖,並且可能會或可能不會在後臺使用SQL來做到這一點。試圖用SQL語言來思考覈心數據會導致你完全誤解核心數據,並導致很多悲傷和浪費時間。

解決您的問題很簡單:您只需要使用相同的managedObjectContext。如果每個tableview都由NSFetchedResultsController填充,則F​​RC應該自動更新每個選項卡的tableview,同時更改其他選項卡的視圖中的更改,因爲FRC會自動接收managedObjectContext通知。

無論如何,通知是要走的路。例如,如果您的某個託管對象顯示在另一個標籤中,您可以將該標籤的活動視圖控制器寄存器設置爲NSManagedObjectContextObjectsDidChangeNotification

但是,您可能需要更改設計。界面語法並沒有教會用戶期望從另一個標籤中的變化中產生很多副作用。它也沒有做自動標籤切換。標籤只能在用戶操作下更改。