NSFetchedResultsController 错误:索引 X 处获取的对象有一个无序的节名称 Y。对象必须按节名称排序

发布于 2024-11-14 20:08:46 字数 872 浏览 2 评论 0原文

我正在 iPhone 应用程序中实现搜索栏。我有工人列表,每个工人都有属性:名字、姓氏、公司。表视图的部分设置为公司属性。

我在搜索时确实设置了谓词:

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

I'm implementing search bar in iphone app. I have list of Workers, each have attributes: firstName, lastName, company. Sections of table view are set to company attribute.

I did set predicate when searching:

NSPredicate *predicate =[NSPredicate predicateWithFormat:@"firstName contains[cd] %@", searchBar.text];

and i get error:

NSFetchedResultsController ERROR: The fetched object at index 3 has an out of order section name 'company2. Objects must be sorted by section name'

when I have sortDescriptor:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 

I did notice that when I change it to

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName"` ascending:YES selector:@selector(caseInsensitiveCompare:)];

now search works correctly with no error. Does initWithKey param must match attribute name in predicate? I don't get it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦境 2024-11-21 20:08:46

来自 NSFetchedResultsController 文档:

获取请求必须至少有
一种排序描述符。如果控制器
生成节,第一个排序
数组中的描述符用于
将对象分组;它是
key 必须与
sectionNameKeyPath 或相对的
使用其键进行排序必须匹配
使用sectionNameKeyPath。

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

From the NSFetchedResultsController docs:

The fetch request must have at least
one sort descriptor. If the controller
generates sections, the first sort
descriptor in the array is used to
group the objects into sections; its
key must either be the same as
sectionNameKeyPath or the relative
ordering using its key must match that
using sectionNameKeyPath.

In your case, you need to use two sorts (in an array.) Element one should be a sort on the company name attribute and second element should sort on the lastName/firstName attribute.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文