我正在iphone应用中实现搜索栏。我有Workers列表,每个都有属性:firstName,lastName,company。表视图的部分设置为company属性。
我在搜索时设置了谓词:
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"firstName contains[cd] %@", searchBar.text];
我收到错误:
NSFetchedResultsController ERROR: The fetched object at index 3 has an out of order section name 'company2. Objects must be sorted by section name'
当我有sortDescriptor时:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
当我将其更改为
时,我注意到了NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName"` ascending:YES selector:@selector(caseInsensitiveCompare:)];
现在搜索工作正常,没有错误。 initWithKey参数是否必须与谓词中的属性名称匹配?我不明白。
答案 0 :(得分:14)
来自NSFetchedResultsController docs:
获取请求必须至少有 一个排序描述符。如果控制器 生成部分,第一种 数组中的描述符用于 将对象分组为多个部分;它的 密钥必须与...相同 sectionNameKeyPath或相对 使用其密钥订购必须与之匹配 使用sectionNameKeyPath。
在您的情况下,您需要使用两种排序(在数组中。)元素1应该是公司名称属性的排序,第二个元素应该对lastName / firstName属性排序。