gpt4 book ai didi

iphone - 使用核心数据实体更新表节标题的有效方法?

转载 作者:行者123 更新时间:2023-12-03 19:39:16 28 4
gpt4 key购买 nike

我正在为我的 UITableView 使用 NSFetchedResultsController,它显示一堆我存储在核心数据中的事件。

我想做的是按相对日期(即今天、明天、本周等)对表格进行分组。每个事件都有一个开始日期,我尝试在事件实体中创建一个名为“sectionIdentifier”的 transient 属性,它将日期转换为上面提到的相对日期,如下所示:

- (NSString*)sectionIdentifier
{
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveSectionIdentifier];
[self didAccessValueForKey:@"sectionIdentifier"];

if (!tmp)
{
tmp = [Utility formattedDateRelativeToNow:self.startTime];
[self setPrimitiveSectionIdentifier:tmp];
}
return tmp;
}

问题是,它显然只执行一次,并且不会自行更新,除非日期发生了更改,这是我真正不期望的。我想过重写 getStartDate 访问器来更新sectionIdentifier,尽管这看起来有点笨拙且效率低下,因为每次我访问该属性时它都会执行此更新

有什么想法吗?

最佳答案

执行此操作的最佳方法是相当违反直觉的。您无需更改获取的结果 Controller 或 Core Data 中的任何内容,而是使用类别扩展 NSDate,以获得基于适当日期计算返回值的键名/方法。然后,您可以将键名/方法包含在获取的结果 Controller sectionNameKeyPath 中。

请参阅之前的答案,了解 how to extend NSDate with keyname/methods like today, yesterday, tomorrow etc. 的示例

要使用此功能,您只需采用获取结果 Controller 获取的实体的日期属性的方法,如下所示:

NSFetchedResultsController *frc=[[NSFetchedResultsController alloc] initWithFetchRequest:aFetch 
managedObjectContext:aMoc
sectionNameKeyPath:@"startdate.yesterday"
cacheName:nil];

...各个部分将自动出现。

关于iphone - 使用核心数据实体更新表节标题的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com