gpt4 book ai didi

ios - NSFetchedResultsController 部分按类排序

转载 作者:行者123 更新时间:2023-11-29 10:43:08 25 4
gpt4 key购买 nike

我需要使用

将我的对象分类为多个部分
[[NSFetchedResultsController alloc] initWithFetchRequest:request 
managedObjectContext:context
sectionNameKeyPath:sectionName
cacheName:nil];

我想按它们的 class 对它们进行排序。例如,类型为 MyObjectType 的对象进入一个部分,类型为 OtherObjectType 的对象进入第二部分,这两种对象类型都将出现在结果中,因为 OtherObjectType 继承自 MyObjectType。在上述方法中将 @"class" 作为 sectionNameKeyPath 参数传递似乎有效。然而,为了获得正确的排序,我还需要 NSFetchRequest 的排序描述符来根据类进行排序:

NSSortDescriptor *sectionDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"class"
ascending:YES];

使用这个排序描述符给我错误Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath class not found in entity

为清楚起见,这里是我想要使用的完整代码块:

  NSFetchRequest* myRequest = [[NSFetchRequest alloc] 
initWithEntityName:@"myEntityName"];

NSSortDescriptor *nameDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"myName"
ascending:YES];

NSSortDescriptor *sectionDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"class"
ascending:YES];
request.sortDescriptors = @[sectionDescriptor, nameDescriptor];

[[NSFetchedResultsController alloc]
initWithFetchRequest:myRequest
managedObjectContext:myContext
sectionNameKeyPath:@"class"
cacheName:nil];

最佳答案

请记住,您只能在使用一个实体及其子实体时执行此操作,因为 NSFetchRequest 需要一个实体来搜索(您可以指定也搜索子实体)。

您需要声明一个属性来标识您希望检索和重组的正确记录类型。因为类是一个运行时值,所以您需要能够在底层存储中使用一个标识符。因此,在您的特定情况下,我会在所有子实体的父实体上使用常量(字符串或数字)属性来标识该记录属于哪个子组。

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

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