我有一个包含多个部分的NSFetchedResultsController。我的应用程序保证部分名称是唯一的。现在给出一个NSString,我想知道它是否是任何部分的名称。如果是这样,请返回匹配部分的部分编号。
天真的方法是迭代self.fetchedResultsController.sections并将节名称与给定的字符串进行比较。
我想知道sectionForSectionIndexTitle:atIndex是否可以更好地解决这个问题。 以下代码崩溃:
int temp = [self.fetchedResultsController sectionForSectionIndexTitle:@"A-Section-Name" atIndex:0];
找到名称与输入字符串匹配的部分的节号是什么?
谢谢!
厄尔本
答案 0 :(得分:1)
您使用的方法是 index 标题部分(显示在整个表格右侧的标题),而不是部分标题。你必须使用sections属性,或者自己缓存部分标题,但这可能不值得。我会做类似的事情:
NSUInteger sectionIndex = [[self.fetchedResultsController.sections valueForKey:@"name"] indexOfObject:sectionName];
其中sectionName
是传递的名称。这会将sectionIndex
设置为适当的索引,如果该部分不存在,则设置为NSNotFound
。
在数组上调用valueForKey:
将返回一个数组,其中包含数组中每个项目上该键的值。它经常被忽视,非常有用。
这似乎比任何缓存解决方案都更简单,因为您不需要使缓存保持最新。如果你在一个循环中没有多次调用它,它应该没问题。