2012-12-17 40 views
0

假設我正在構建一個顯示聯繫人的UITableView的應用程序。用戶的聯繫人存儲在遠程服務器上。我從服務器獲取用戶的聯繫人並將其存儲在覈心數據中。用於存儲從核心數據(iOS)獲取的數據的首選方法

我的UITableViewController加載並從Core Data中獲取NSManagedObject子類(名爲ContactVO)的數組。我使用這個ContactVOs數組來填充我的UITableView。然後,我向服務器發出一個請求,以提取用戶的最新聯繫人列表。當我從服務器獲得響應時,我從Core Data存儲中刪除所有聯繫人,然後插入從服務器數據創建的聯繫人。此時,我通知我的UITableViewController數據已更改,並通過委託方法將新聯繫人傳遞給它。

問題:只要我從Core Data中刪除聯繫人,存儲在我的UITableViewController中的聯繫人VOs的引用就是垃圾。

這裏的想法是讓桌面視圖始終允許用戶進行交互,但始終顯示可用的最新聯繫人。

事情我已經嘗試:

  • 創建一個類(聯繫)的所有相同的屬性ContactVO和填充這個類從核心數據獲取的數據的情況下,則返回數組聯繫對象,以我的UITableViewController

  • 創建每個ContactVO獲取一個NSDictionary,並返回字典的數組我的UITableViewController

這兩者都有一個更好的方法。存儲獲取請求結果的首選方法是什麼?

+0

大概我對你的問題理解不好,但這聽起來很正常,只要數據源發生變化,你必須調用[yourTable reloadData],然後你全部刷新了。另外,你可以使用一個NSManagedObject數組,而不需要類似的類。或者像其他人所建議的那樣,使用NSFetchedResultsController,在這種情況下,只需記住在批量更新時設置委託= nil,然後在完成時設置委託=自己。 – Leonardo

回答

2

您應該閱讀約NSFetchedResultsController及其。它可以幫助您在模型更改時刷新表中顯示的數據(刪除,添加,修改對象)。你也可以在Xcode中找到一個示例項目,我相信它被稱爲Core Recipes。

希望這會有所幫助!

+0

這似乎確實是一個可靠的解決方案。不幸的是,我目前的視圖控制器比上面描述的場景複雜得多。在你的tableview的數據基於一個獲取請求的情況下,NSFetchedResultsController看起來是一個有用的類。我正確地標記了這個答案,因爲我相信這是我發佈的問題的正確答案。我很想聽到更多的建議。 –