可可 iphone fetchedResultsController 排序

Posted

技术标签:

【中文标题】可可 iphone fetchedResultsController 排序【英文标题】:cocoa iphone fetchedResultsController sorting 【发布时间】:2010-01-13 03:35:21 【问题描述】:

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

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

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

有什么想法吗?

豪伊

【问题讨论】:

【参考方案1】:

解决了我的问题!

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

NSError *error = nil;

if (![[self fetchedResultsController] performFetch:&error])

  NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
  abort();

[self.tableView reloadData];

【讨论】:

好吧,我确实提到了调用 performFetch 而你已经在做 reloadData... 你做到了。我只是个白痴,对此很陌生。 - 感谢您的提示。【参考方案2】:

您应该能够简单地更改您初始化NSFetchedResultsControllerNSFetchRequest 对象的属性,然后执行[resultsController performFetch:...]。例如,您可以更改NSFetchRequest 中的谓词和排序描述符数组,然后调用performFetch

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

更新

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

【讨论】:

似乎我可以更新获取的结果,但表格没有更新。我试过使用 [self.myTable reloadData],但这只是删除了所有行并且没有显示任何结果。我想做的就是能够即时更改排序。怎么会这么难?【参考方案3】:

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

[NSFetchedResultsController deleteCacheWithName:@"MyCacheName"];

【讨论】:

以上是关于可可 iphone fetchedResultsController 排序的主要内容,如果未能解决你的问题,请参考以下文章

iphone 的主宰可可因 Apple Mach-O 链接器 (id) 错误而中断

如何使 iphone 和 iphone4-retina 兼容的应用程序(在可可中完成)轻松适应 ipad?

可可的指数

如何使用 UIImages 创建 UITableView? - 可可/Objective-C

Mac OS X 可可应用程序中的 Internet 连接通知

可可触控自动化UI测试有没有好的教程?