gpt4 book ai didi

ios - CoreData NSFetchedResultsController 排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:46 25 4
gpt4 key购买 nike

我在对 NSFetchedResultsController 进行排序时遇到了一个小问题。

我的 NSManagedObject 有两个属性。 日期开始时间

date 在我所有的对象上都是时间 00:00:00,这样当使用 date 作为 sectionNameKeyPath 时它会捕获所有具有相同日期(按天)的对象到一个部分。如果日期的时间不同,它会将每个对象放入不同的部分。

这很好用,但是在每个组中我想按 startTime 对对象进行排序。因此,它们分别从该 date 的最早到每个部分的最新列表。

我的问题是当使用 date 作为 sectionNameKeyPathstartTime 作为 NSSortDescriptor` 它不喜欢它并且播放很奇怪。例如仅有时以看似不规则的方式显示某些数据。

我认为这归结为必须让排序描述符和 sectionNameKeyPath 相同。我这样想对吗?如果不是,我应该如何设置我的 NSFetchedResultsController 以按照提到的方式列出我的数据?

谢谢。

编辑:这里是代码...同样值得注意的是,当使用 startTime 作为我的第二个排序描述符时,它会导致在我的 tableview 中显示重复项,其中包含 nil 对象。

NSFetchedResultsController:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"startTime" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor1, sortDescriptor2];

[fetchRequest setSortDescriptors:sortDescriptors];

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"date" cacheName:@"Master"];

cellForRowAtIndexPath 只是显示我如何指定每个托管对象的片段:

id <NSFetchedResultsSectionInfo> sectionInfo = [self.flightFetchedResultsController.sections objectAtIndex:indexPath.section];
NSArray *sectionFlights = [sectionInfo objects];
Flight *flight = [sectionFlights objectAtIndex:indexPath.row];

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.flightFetchedResultsController.sections.count;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.flightFetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}

最佳答案

您的部分键名称路径需要与第一个 排序描述符匹配。

所以你可以...

// sectionKeyNamePath = @"date".

NSSortDescriptor *dateSD = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
NSSortDescriptor *startTimeSD = [NSSortDescriptor sortDescriptorWithKey:@"startTime" ascending:YES];

frc.request.sortDescriptors = @[dateSD, startTimeSD];

如果您这样做,它将按日期排序(和部分),然后按开始时间对每个部分进行排序。

来自您的代码

您获取的对象不正确。

要获取对象,您需要使用...

Flight *flight = [self.frc objectAtIndexPath:indexPath];

获取的结果 Controller 知道它的部分和行。您无需将其拆分。

关于ios - CoreData NSFetchedResultsController 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679407/

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