0

概述的iOS - 核心數據 - 的UITableView - 更新計算值 - NSFetchedResultsController

  • 我有使用核心數據(NSFetchedResultsController)和表視圖在iOS項目。我有一個名爲「joingDate」的字段。

  • 我在表格視圖單元格上有一組標籤來表示數據。

  • 如果joinDate是今天/明天,那麼我想顯示爲「今天」或「明天」,而不是指定實際日期。

  • 我只是在想,我會檢查lastCheckedDate(上一次檢查日期的時間),如果它超過一天,那麼我將不得不更新所有那些加入日期的行中的標籤, 「今天或明天」。

  • 在數據庫中,「JoiningDate」將作爲日期存儲,只有標籤需要以特定格式顯示「今天」/「明天」/日期。

我實現了以下方法,其中標籤「joingDateComments」根據它的當前日期進行更新。

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 

問題

注意 - 我使用NSFetchedResultsController

  1. 什麼是更新其中有一個joiningDate今天/明天所有這些行標籤的最佳方法?
  2. 我應該重新加載表中的所有記錄嗎? (但這隻會影響幾行)。
  3. 我應該循環遍歷所有索引並檢查和更新。我不知道這會工作,因爲我使用NSFetchedResultsController
  4. 我是否應該使用瞬態數據,以便我可以查詢數據庫並獲取今天/明天具有「JoingDate」的記錄,並更新瞬態字段JoingDateComments,以便這些記錄將自動被NSFetchedResultsController刷新

答:

PLS經過安德魯的意見。

回答

2

user1046037,

這實在不是一個核心數據的問題,但一個UITableView問題。絕大多數情況都是在-tableView:cellForRowAtIndexPath:方法中處理的。在那裏你會選擇你代表細胞的方式。另一個地方是當NSFetchedResultsController用更改的對象調用你。 (標準的核心數據表視圖控制器爲你寫這個鍋爐板。)換句話說,你不應該循環所有的對象。如果您希望在更新這些單元格時進行更精細的紋理控制,則可以偵聽已保存的通知。然後查詢tableView中的可見單元格數組。然後可以使用單元索引路徑來更新單元內容。

Andrew

+0

謝謝安德魯,你說的話有道理。我遇到的唯一問題是「joinedDate」存儲在數據庫中,當我想顯示單元格時,我會檢查它是否在昨天/今天/明天並提供相應的評論,但當前日期不斷變化,並且在某些時候,它需要刷新。現在我做一個家務保留任務,通過在應用程序啓動時查詢數據庫來檢查需要更新的記錄/從另一個屏幕來到此屏幕。我在數據庫中有一個單獨的字段來表示日期類型(今天/明天/昨天) – user1046037

+0

user1046037,這與Core Data無關。它與查找可見的表格視圖單元格和更新日期指示符有關。爲什麼要將日期字符串的格式保留在您的模型中(今天/明天/昨天)?您只需比較NSDate.date即可。你知道,MVC和所有這些......我認爲你正在使這個問題比它需要的更困難。順便說一下,iOS會在發生重大時間變化時向您發送通知。你可以使用它來觸發你的UI更新。安德魯 – adonoho

+0

謝謝安德魯,如果我不存儲在數據庫中,我怎麼會知道哪些單元格顯示錯誤的字符串。如果不存儲數據庫,那麼我必須完成所有數據的重新加載。因此,現在我存儲哪些記錄的標籤爲「昨天」/「今天」/「明天」,以便我可以查詢它們並在昨天和後天之間的記錄一天過去時更新它們。關於通知。每個應用程序只有64個插槽,並在大多數情況下達到極限,所以我不想使用通知。 – user1046037

相關問題