【问题标题】:iOS - core data - UITableView - update calculated value - NSFetchedResultsControlleriOS - 核心数据 - UITableView - 更新计算值 - NSFetchedResultsController
【发布时间】:2012-06-01 20:52:06
【问题描述】:

概述

  • 我有一个使用核心数据 (NSFetchedResultsController) 和表格视图的 iOS 项目。我有一个名为“joingDate”的字段。

  • 我在表格视图单元格上有一组标签来表示数据。

  • 如果加入日期是今天/明天,那么我想显示为“今天”或“明天”,而不是指定实际日期。

  • 我只是在想,我会检查 lastCheckedDate(最后一次检查日期的时间),如果超过一天,那么我将不得不更新具有加入日期的行中的所有标签和“今天”或“明天”。

  • 在数据库中,“JoiningDate”将存储为日期,只有标签需要以特定格式显示“今天”/“明天”/日期。

我已经实现了以下方法,其中标签“joingDateComments”根据其当前日期进行更新。

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

问题

注意 - 我正在使用NSFetchedResultsController

  1. 更新所有具有joiningDate 为今天/明天的行标签的最佳方法是什么?
  2. 我应该重新加载表中的所有记录吗? (但这只会影响几行。)
  3. 我是否应该遍历所有索引并检查和更新。我不确定这是否可行,因为我使用的是NSFetchedResultsController
  4. 我应该使用瞬态数据,这样我就可以查询数据库并获取具有“JoingDate”为今天/明天的记录并更新瞬态字段JoingDateComments,这样这些记录就会自动刷新NSFetchedResultsController

答案:

请通过 Andrew 的 cmets。

【问题讨论】:

    标签: ios uitableview core-data transient nsfetchedresultscontroller


    【解决方案1】:

    用户1046037,

    这确实不是核心数据问题,而是 UITableView 问题。大多数事情都在-tableView:cellForRowAtIndexPath: 方法中处理。在那里,您将选择如何表示单元格。另一个地方是NSFetchedResultsController 用更改的对象调用您。 (标准的核心数据表视图控制器为您编写了这个样板。)换句话说,您不必遍历所有对象。如果您希望对这些单元格的更新时间进行更精细的控制,您可以收听确实保存通知。然后在 tableView 中查询可见单元格的数组。然后可以使用单元格索引路径来更新单元格内容。

    安德鲁

    【讨论】:

    • 谢谢安德鲁,你说的很有道理。我遇到的唯一问题是“joiningDate”存储在数据库中,当我想显示单元格时,我检查它是否昨天/今天/明天并提供适当的 cmets,但当前日期不断变化,在某些时候,它需要刷新。现在,我执行一项管家任务,通过在应用程序启动/从另一个屏幕进入此屏幕时查询数据库来检查需要更新的记录。我在数据库中有一个单独的字段来表示日期的类型(今天/明天/昨天)
    • user1046037,这与 Core Data 无关。它与查找可见的表格视图单元格和更新日期指示符有关。为什么要在模型中保留今天/明天/昨天的日期字符串格式?您只需要与 NSDate.date 进行比较。你知道,MVC 和所有这些......我认为你让这个问题变得比它需要的更难。顺便说一句,当时间发生重大变化时,iOS 会向您发送通知。您可以使用它来触发您的 UI 更新。安德鲁
    • 感谢 Andrew,如果我不存储在数据库中,我怎么知道哪些单元格显示了错误的字符串。如果不将其存储在数据库中,那么我必须完全重新加载所有数据。所以现在我存储哪些记录的标签为“昨天”/“今天”/“明天”,这样我就可以在一天过去时查询它们并更新它们以及昨天和后天之间的记录。关于通知。每个应用程序只有 64 个插槽,并且在大多数情况下都达到了限制,所以我不想使用通知。
    • user1046037,您正在处理的项目数量相对较少,即在表格视图中可见的项目。只需更新它们。您对 NSNotificationCenter 中的 64 个条目限制是错误的。使用 NSNotificationCenter。安德鲁
    • user1046037,这些是来自UIApplication 的通知。你想要的是:UIApplicationSignificantTimeChangeNotification。我鼓励您阅读有关 Cocoa Touch 应用架构的文档。无论如何,由于您似乎是 Stack Overflow 社区的新成员,并且如果这次对话被证明有帮助,请在我的回答中打勾。安德鲁
    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多