gpt4 book ai didi

objective-c - CoreData 如何使用 Search 和 ARC 过滤 NSFetchedResultsController

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:39 24 4
gpt4 key购买 nike

我找到了这个通过 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com