2015-04-17 66 views
0

我正在編寫一個基本的UITableView的應用程序,顯示從CoreData加載的NSManagedObject。 還有一個正在運行的後臺進程,並使用NSNotificationCenter通知viewControllerCoreDataNSManagedObject(IE:使用NSInserted/Updated/DeletedObjectsKey)的任何更改。在視圖接收到更改數據通知後,我有幾個有關更新tableView的最佳方法的問題。iOS使用UITableView reloadData vs endUpdates

  1. 是更好地呼籲tableViewreloadData或找出一個差異上的數據並執行插入/刪除/內tableview.BeginUpdates()更新 - tableView endUpdates()

  2. 在用戶與tableView互動時刷新tableView是否有效嗎?

  3. 有沒有一種簡單的方法,我缺少做兩個數組之間的差異CoreDataNSManagedObject s並適用於tableView

我希望我沒有過於複雜的事情

+4

選項4)使用NSFetchedResultsController在評論中提到,你的情況。這是完成這項任務。 –

+0

謝謝!我會在這裏閱讀一些文檔。我是iOS開發新手。 –

+2

NSFetchedResultsController和NSFetchedResultsControllerDelegate文檔都有示例代碼,並且有許多教程可用。 - 如果您使用「Master-Detail應用程序」模板在Xcode中創建新的iOS應用程序,並選擇「Core Data」選項,那麼您將獲得一個包含所有樣板代碼的免費示例應用程序:) –

回答

0
  1. 這要看情況。如果您只想刷新數據而沒有任何動畫,請使用reloadData。在你建立一個用戶友好的平滑數據改變動畫的情況下,最好是用一些漂亮的動畫來計算diff和插入/刪除行

  2. 用戶沒有與tableView無限地交互。您可以跟蹤何時不拖動表格並更新數據,但刷新視圖以顯示實際數據是當今的常見做法。例如,在網絡上它是AJAX技術。此外,正如我在1所提到的,使用動畫來吸引用戶的關注新的數據

  3. 由於它使用NSFetchedResultsController會更好

+0

謝謝你的解釋。根據@MartinR的評論,我選擇了3 –