NSFetchedResultsController 和 NSPredicate 以及部分名称
Posted
技术标签:
【中文标题】NSFetchedResultsController 和 NSPredicate 以及部分名称【英文标题】:NSFetchedResultsController and NSPredicate and a section name 【发布时间】:2012-05-04 12:44:40 【问题描述】:我有两个实体的核心数据模型,它们之间存在多对多关系。
例如,
Conference <<---->> Speaker
一个会议可以有多个演讲者,一个演讲者可以参加多个会议。
我尝试使用 NSFetchedResultsController fetchRequest 的主要实体是 Speaker。
虽然它确实列出了所有发言人,但我试图将该部分作为“会议”名称并列出该部分中的所有发言人。我想要它,以便作为演讲者的名字“约翰”出现在两个部分中。这意味着他是两次会议的演讲者。
这是我正在使用的 sectionNameKeyPath:@"conferences.Name"
NSFetchedResultsController *aFetchedResultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"conferences.Name" cacheName:@"fCache"] autorelease];
这有点行不通,当我使用[sectionInfo name]
时,我得到TedEx
作为部分标题。
另一个问题是,如果我一个演讲者出现在一个部分,(会议),它不会出现在另一部分(即使那个部分(会议)有那个演讲者对象)。
这可能是因为,我将 sectionName 作为一组组合会议。 TedEx, SXSW
作为一个单独的部分。
目标应该是如何挑选出 sectionNameKeypath 以仅获取一个会议并列出每个会议中的所有发言人。也许我应该设置某种谓词?
我有点陷入困境,这种方法有问题吗?我读过关于 Predicates 的文章,但如果您是核心数据的新手,这有点难以理解。
【问题讨论】:
【参考方案1】:这与您考虑的方式略有不同,我不确定是否有更好的方法可以使用 FRC 和 sectionNameKeyPath 来完成它,就像您想要的那样,但也许这会奏效:
-
不用获取扬声器,只需执行普通的
NSFetchRequest
即可获取
NSArray
称为 conferences
。您可以按以下方式排序
会议名称或日期或您需要的任何内容。
然后为您的表格视图将部分的数量设置为[conferences count]
。
对于每个部分的行数,获取该部分的会议对象[conferences objectAtIndex:section]
,并返回该会议的发言人数。
要填充单元格数据,只需通过调用获取扬声器对象:[[conferences objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
【讨论】:
感谢马克的回答,虽然我是专门询问 NSFetchedResultsController.. 我更喜欢因为任何更改都会在表中反映而无需任何努力,因为我必须处理获取请求中的所有内容.但我确实意识到在 NSFetchResultsController 中没有办法做到这一点以上是关于NSFetchedResultsController 和 NSPredicate 以及部分名称的主要内容,如果未能解决你的问题,请参考以下文章