【问题标题】:NSFetchedResultsController - out of order section errorNSFetchedResultsController - 乱序部分错误
【发布时间】:2011-11-25 18:03:10
【问题描述】:

我正在使用排序描述符设置 NSFetchedResultsController

sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@”name” ascending:YES selector:@selector(caseInsensitiveCompare:)];

还有部分

aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@”name” cacheName:nil];

然后我还像这样设置表格视图部分的委托:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [self.fetchedController sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [self.fetchedController sectionForSectionIndexTitle:title atIndex:index];
}

有时,当我插入对象时,我会收到错误消息“索引 X 处获取的对象的节名称乱序'something. Objects must be sorted by section name'”;

我正在插入数千行。当错误发生时,总是相同的大小写:我有 10 个对象被称为相同的东西,但有些是大写的,有些是小写的。示例:nameexample、nameExample、nameEXAMPLE、nameexample、nameExample 等

知道为什么会出现此错误以及如何解决此问题吗? 我设置不区分大小写的原因是因为我的部分是基于第一个字母的,如果我不区分大小写,我会得到部分“a”和“A”部分。

【问题讨论】:

    标签: core-data nsfetchedresultscontroller nssortdescriptor


    【解决方案1】:

    我认为部分的顺序与排序的顺序不同,因为虽然我使用相同的属性,但一个不区分大小写,另一个不区分。

    解决方案:我在核心数据中添加了另一个属性,其中包含小写的名称,我在部分中使用此属性并进行排序。这样我就不必调用@selector(caseInsensitiveCompare:)

    【讨论】:

      【解决方案2】:

      请原谅我说复制数据让我畏缩有两个原因:

      • 虽然托管 iOS 的设备看起来功能强大,但它们的功能要强大得多 比 iMac 更受资源限制。含义:空间和时间是 定位平板电脑和智能手机时更重要的因素 电话。
      • 不管怎样,为什么要让自己经历这样的麻烦 维护两个大致相同的数据集?

      对于那些有空间意识或反身意识的人:我认为更合适的解决方案是在提交数据模型之前强制存储数据小写;并在显示前系统地调整字母。从理论上讲,这使搜索更简单(更快),并且肯定需要更少的内存。

      或者,在提交到数据模型之前,将任意数量的字符串的第一个字母大写可能更合适。 This post澄清你可以使用

      managedObject.string = [stringToBeCommitted capitalizedString];
      NSError *error = nil;
      if(![managedObjectContext save:&error]) {
          ...
      }
      

      为此目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 2014-02-12
        相关资源
        最近更新 更多