cocoa iphone fetchedResultsController排序

时间:2010-01-13 03:35:22

标签: iphone cocoa-touch uitableview core-data sorting

我正在开发一个依赖于一组数据的应用程序,这些数据可以通过多种方式进行排序。我有核心数据设置。我有一个获取请求,带来所有记录。我在导航控制器的左侧有一个排序按钮。它带有一个带有我的排序选项的表的模态视图。当您更改选项时,它会关闭模态视图。我可以使用[[NSUserDefaults standardUserDefaults] objectForKey:@“sortOption”]访问所选选项。

现在我需要以某种方式使用新的排序描述符数组更新获取请求并更改sectionNameKeyPath。

我尝试将fetchedResultsController设置为nil并在表视图上调用reloadData。似乎没有更新。

有什么想法吗?

豪伊

3 个答案:

答案 0 :(得分:2)

解决了我的问题!

看起来在重新定义获取请求后我需要做的就是执行获取并重新加载表数据。

NSError *error = nil;

if (![[self fetchedResultsController] performFetch:&error])
{
  NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
  abort();
}
[self.tableView reloadData];

答案 1 :(得分:1)

您应该只需更改初始化NSFetchRequest的{​​{1}}对象的属性,然后执行NSFetchedResultsController。例如,您可以在[resultsController performFetch:...]中更改谓词和排序描述符数组,然后调用NSFetchRequest

如果您需要一个如何使用NSFetchedResultsController的示例,请参阅Apple的CoreDataBooks示例代码。

<强>更新

呃,不幸的是,如果你想更改section键,那么我认为你必须使用新的section key创建一个新的NSFetchedResultsController对象。 NSFetchedResultsController的所有属性似乎都是只读的:(

答案 2 :(得分:0)

如果您启用了缓存,我会确保删除fetchedResultsController缓存。

[NSFetchedResultsController deleteCacheWithName:@"MyCacheName"];