- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我找到了这个通过 NSFetchedResultsController 进行搜索的完美答案:https://stackoverflow.com/a/4481896/1486928
编辑:显示问题的项目:http://cl.ly/2x0C0N0E4240
它看起来真的很棒,只是它不是为与 ARC 一起使用而编写的,我试图只删除所有“保留”、“释放”、“自动释放”。
它仍然有效,大部分情况下,问题是,当我在搜索栏中输入一个字符时,它会按预期显示过滤后的表格,但它只需要 1 个字符(如果你添加更多它什么都不做)然后每隔一个“搜索”将显示第一个只用了 1 个字符的搜索的结果。
我已经研究了 2 天,将 NSlog 放在任何地方以查看何时调用每个方法,但仍然找不到如何使其工作:(
谢谢!
编辑:这里是 .m http://pastebin.com/9U4TfbA6编辑:这里是 .h http://pastebin.com/S9aaNRFE
此外,如果它可以在我发表评论时帮助搜索工作:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController_! = nil)
{
return fetchedResultsController_;
}
...
}
还有这个:
- (NSFetchedResultsController *)searchFetchedResultsController {
if (searchFetchedResultsController_ != nil)
{
return searchFetchedResultsController_;
}
...
}
但它搞砸了其他事情:/
最佳答案
我猜你搞砸了搜索显示 Controller 委托(delegate)方法,
尤其是你需要检查这个方法
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString;
因为这个方法会为您在搜索字段中键入的每个字符重新加载您的 TableView ,正如名称本身所暗示的那样 shouldReloadTableForSearchString
编辑:
那么您需要实现 UISearchBar
的 2 个委托(delegate)方法,因为您所有的 UISearchDisplayController
委托(delegate)方法都是相同的,而这 2 个方法是
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
这告诉委托(delegate)人用户更改了搜索文本。
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
如果指定范围内的文本应替换为给定文本,则使用此选项。
请注意这些方法会被调用多次,我的意思是搜索栏中添加和删除的每个字符,因为每次搜索文本更改时您都将 searchFetchedResultsController 设置为 nil
把这部分注释掉就可以了
/*if (searchFetchedResultsController_ != nil)
{
NSLog(@"Returned !nil searchController");
return searchFetchedResultsController_;
}*/
关于objective-c - CoreData 如何使用 Search 和 ARC 过滤 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137319/
我正在尝试使用具有混合语言数据的 FRC,并希望有一个部分索引。 从文档看来您应该能够覆盖 FRC - (NSString *)sectionIndexTitleForSectionName:(NSS
使用等效的 NSFetchRequest 重新创建 NSFetchedResultsController 时,为什么 [NSFetchedResultsController PerformFetch:
我正在尝试起草一个可重复使用的类,该类基本上可重复用于具有几乎相同实现的多个实体。基本上我将有几个 UIViewController,每个都包含 UIView,其中包含 UITableView 以及由
我有一个 iPhone 和一个 Android 应用程序。在 iPhone 上,我使用 NSFetchedResultsController 来管理我的 UITableView 的数据。目前我有很多数
NSFetchedResultsController 监视对正在跟踪的整个托管对象的更改。每当在当前上下文中修改任何属性时,例如 – controller:didChangeObject:atInde
自 1 个月以来,我一直在使用 NSFetchedResultsController 构建应用程序,并在 3.1.2 SDK 上测试该应用程序。问题是我一直在我的应用程序中到处使用 NSFetched
我有一个人物和宠物的数据库,具有一对多关系 人宠物 姓名 姓名 宠物>主人 我正在使用由核心数据支持的 UITableView 和 nsfetchedresultscontroller 来显示宠物列表
我有一个 NSFetchedResultsController,它在 TableView 中显示项目列表,包括关联实体的计数。当为此关联添加对象时(使用 addXXXObject),不会调用回调来通知
花了几个小时后,我发现无法在以下文章中由 SQLite 支持的 NSFetchedResultsController 中进行自定义排序。 NSFetchedResultsController cust
我设置了一个 NSFetchedResultsController 来填充 UITableView,基于我的“主”NSManagedObjectContext。 在计时器中,我不断地将对象添加到单独的
在我的应用程序中,我需要循环遍历核心数据中的所有实体,并且我正在使用 NSFetchedresultcontroller。 我现在正在这样做: NSArray *tempArray = [[NSArr
我正在开发我的第一个核心数据支持的应用程序,但无法弄清楚如何正确设置 NSFetchedResultsController。我有两个实体: /-----------\ /--------
我正在使用 NSFetchedResultsController 在 TableView 中显示项目: - (NSInteger)numberOfSectionsInTableView:(UITabl
我将 NSFetchedResultsController 放入我的代码中,这样我就可以对 TableView 数据进行很好的自动分段。 所以我正在运行测试以确保一切正常。我的持久存储中有一个 Boo
我如何使用带有翻译后的排序键和sectionKeyPath的NSFetchedResultsController? 问题:我在数据库中的属性“type”中有 ID,例如 typeA、typeB、typ
大家好 我的 CoreData 驱动应用程序有多个来自同一存储的数据 View ,并且全部使用 NSFetchedResultsController。目前,它们的 NSFetchedResultsCo
我想使用使用 bool 值设置的不同谓词从 NSFetchedResultsController 重新获取数据。如何刷新 NSFetchedResultsController 以获取一组新数据? -
核心数据在 NSManagedObjectContext 类中提供了“executeFetchRequest”方法,我们可以使用该方法从表中获取数据并以任何需要的方式使用它。 现在还有另一种方法,即使
我正在编写一个应用程序,一个屏幕上有两个表格。左表是文件夹列表,右表显示文件列表。当点击左侧的一行时,右侧表格将显示属于该文件夹的文件。 我正在使用 Core Data 进行存储。当文件夹的选择发生变
我有一个由 NSFetchedResultsController 管理的 TableView 。但是,我在查找或创建操作时遇到问题。当用户点击表格 View 的底部时,我正在向服务器查询另一批内容。如
我是一名优秀的程序员,十分优秀!