iOS-核心数据-UITableView-更新计算值-NSFetchedResultsController

iOS-核心数据-UITableView-更新计算值-NSFetchedResultsController,ios,uitableview,core-data,transient,nsfetchedresultscontroller,Ios,Uitableview,Core Data,Transient,Nsfetchedresultscontroller,概述 我有一个iOS项目,它使用核心数据(NSFetchedResultsController)和表视图。我有一个名为“joingDate”的字段 我在表视图单元格上有一组标签来表示数据 如果joiningDate是今天/明天,则我希望显示为“今天”或“明天”,而不是指定实际日期 我只是在想,我会检查lastCheckedDate(上次检查日期时),如果超过一天,那么我必须更新行中所有包含加入日期和“今天”或“明天”的标签 在数据库中,“JoiningDate”将存储为日期,只有标签需要以特定

概述

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

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

  • 如果joiningDate是今天/明天,则我希望显示为“今天”或“明天”,而不是指定实际日期

  • 我只是在想,我会检查lastCheckedDate(上次检查日期时),如果超过一天,那么我必须更新行中所有包含加入日期和“今天”或“明天”的标签

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

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

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

注意-我使用的是
NSFetchedResultsController

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

    请浏览安德鲁的评论。

    用户1046037

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


    安德鲁

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