【问题标题】:CoreData How to filter NSFetchedResultsController with Search and ARCCoreData 如何使用 Search 和 ARC 过滤 NSFetchedResultsController
【发布时间】:2012-08-21 15:58:55
【问题描述】:

我找到了通过 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_;
    }
...
}

但它搞砸了其他事情:/

【问题讨论】:

    标签: objective-c ios core-data automatic-ref-counting


    【解决方案1】:

    我猜你是在搞乱搜索显示控制器委托方法,

    尤其是你需要检查这个方法

    - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString;
    

    因为此方法会为您在搜索字段中键入的每个字符重新加载表格视图,正如名称本身所暗示的 shouldReloadTableForSearchString

    编辑:

    你需要实现UISearchBar 的2 个委托方法,因为你所有的UISearchDisplayController 委托方法都是相同的,而这2 个方法是

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
    

    这告诉代理用户更改了搜索文本。

    - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
    

    如果指定范围内的文本应替换为给定文本,则使用此选项。

    请注意这些方法被多次调用,我的意思是在搜索栏中添加和删除的每个字符,因为每次搜索文本更改时您都将 searchFetchedResultsController 设置为 nil

    把这部分注释掉就好了

    /*if (searchFetchedResultsController_ != nil)
    {
    NSLog(@"Returned !nil searchController");
    return searchFetchedResultsController_;
    }*/
    

    【讨论】:

    • 我将在几秒钟内完成我的代码,但它与上面链接的答案 98% 相同
    • 好了,现在一切就绪! :-)
    • 酷,让我检查一下,等一下
    • goota head out 2 小时后回来,非常感谢,我会告诉你进展如何!
    • 我已经在我的回答中提到了他们在他们之下所做的事情:P
    猜你喜欢
    • 2011-05-27
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多