尝试在表视图中按日期对Core Data对象进行排序

时间:2009-12-16 04:59:57

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

我有一个Core Data设置,其中每个对象都有一个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时,我的核心数据设置工作正常,我也知道我的workoutDateString方法正常工作。但是当我将sectionNameKeyPath设置为workoutDateString时,它不仅不会显示节标题,而且每次添加一个锻炼对象时,程序都会因此错误而崩溃:

  

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

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

1 个答案:

答案 0 :(得分:1)

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

NSFetchedResultsControllerDelegate'动画更改'代码会在将项目添加到全新部分或将某个部分中的所有项目移动到另一个部分时导致严重问题,原始部分将保留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];
}