NSFetchedResultsController错误:索引X处的获取对象具有无序部分名称Y.对象必须按部分名称排序'

时间:2011-06-07 15:12:38

标签: ios4 sorting core-data uisearchbar

我正在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参数是否必须与谓词中的属性名称匹配?我不明白。

1 个答案:

答案 0 :(得分:14)

来自NSFetchedResultsController docs:

  

获取请求必须至少有   一个排序描述符。如果控制器   生成部分,第一种   数组中的描述符用于   将对象分组为多个部分;它的   密钥必须与...相同   sectionNameKeyPath或相对   使用其密钥订购必须与之匹配   使用sectionNameKeyPath。

在您的情况下,您需要使用两种排序(在数组中。)元素1应该是公司名称属性的排序,第二个元素应该对lastName / firstName属性排序。