【问题标题】:Trying to sort Core Data objects by date in table view尝试在表格视图中按日期对核心数据对象进行排序
【发布时间】:2010-12-27 02:41:13
【问题描述】:

我有一个核心数据设置,其中每个对象都有一个 NSDate,以及一个将日期作为字符串返回的方法(即“12/15/2009”)。对象显示在表格视图中,我想根据日期字符串将它们分类为部分。 Apple 在 CoreDataBooks 应用程序中的示例代码使用了这一行:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"author" cacheName:@"Root"];

所以我对其进行了修改并在我的项目中使用了这一行:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"workoutDateString" cacheName:@"Root"];

其中“workoutDateString”是将锻炼对象的日期作为字符串返回的方法。当我将 sectionNameKeyPath 保留为 nil 时,我的核心数据设置工作得很好,而且我也知道我的锻炼日期字符串方法工作正常。但是当我将 sectionNameKeyPath 设置为锻炼日期字符串时,它不仅不显示部分标题,而且每次添加锻炼对象时,程序都会因以下错误而崩溃:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第1节中的行数无效。更新后现有节中包含的行数(3)必须等于行数更新前包含在该节中 (1),加上或减去从该节插入或删除的行数(0 插入,0 删除)。'

这是我的第一个真正的 iPhone 项目,我没有任何设置表格部分的经验。相信我,我在 Google 上花了很多时间寻找解决方案。

【问题讨论】:

    标签: ios objective-c iphone uitableview core-data


    【解决方案1】:

    我也遇到了同样的问题,并且花了很多时间研究它。

    NSFetchedResultsControllerDelegate 'animate changes' 代码会在将项目添加到一个全新的部分或将一个部分中的所有项目移动到另一个部分时导致严重问题,从而使原始部分留下 0 个项目。

    我要么删除所有花哨的插入/删除部分/行的代码,要么使用 Jeff LaMarche 的代码来修复它。 http://iphonedevelopment.blogspot.com/2009/11/one-fix-to-nsfetchedresultscontroller.html

    编辑:您实现了 [tableView:titleForHeaderInSection],对吗?

    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
        return [sectionInfo name];
    }
    

    【讨论】:

    • 我添加了 Jeff LaMarche 的代码和 tableView:titleForHeaderInSection 方法,现在应用程序在启动时崩溃:*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) 越界 (0)'
    • _ 是时候开始调试了,这些都是“已知良好”的代码。
    • 另外,在进一步了解 NSFetchedResultsController 内容之前,您应该阅读表视图编程指南。如果您没有很好地掌握表格视图(即缺少诸如 titleForHeaderInSection 之类的内容),那么几乎不可能了解 NSFetchedResultsController。
    • 啊哈,我刚刚实现的titleForHeaderInSection方法错了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多