2012-08-27 38 views
3

过滤NSFetchedResultsController我发现这个完美的答案通过NSFetchedResultsController搜索:https://stackoverflow.com/a/4481896/1486928CoreData如何使用搜索和ARC

编辑:显示问题的项目:http://cl.ly/2x0C0N0E4240

看来真的很棒,除了它是不写使用ARC,我试图删除所有“保留”“释放”“autorelease”。

它仍然有效,主要是,当我在搜索栏中输入一个字符时,它会按预期显示过滤的表,但它只需要1个字符(如果添加更多,则不会执行任何操作)每一个其他的“搜索”将显示只有1个字符的第一个搜索的结果。

我一直盯着它把的NSLog2天随时随地看时会调用每一个方法,但还是没能找到如何使它工作:(

感谢

编辑:这里是.M http://pastebin.com/9U4TfbA6 编辑:这里是.H http://pastebin.com/S9aaNRFE

此外,如果它可以帮助我这个评论搜索的工作原理:

- (NSFetchedResultsController *)fetchedResultsController { 
    if (fetchedResultsController_! = nil) 
    { 
     return fetchedResultsController_; 
    } 
... 
} 

而且这样的:

- (NSFetchedResultsController *)searchFetchedResultsController { 
    if (searchFetchedResultsController_ != nil) 
    { 
     return searchFetchedResultsController_; 
    } 
... 
} 

但它弄乱其他的东西:/

回答

3

我猜你与搜索显示控制器的委托方法搞乱了,

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

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

由于此方法将刷新为每个您在您的搜索字段名称ITSE键入字符的表视图LF建议shouldReloadTableForSearchString

编辑:

那么你需要实现的UISearchBar 2种委托方法,因为你所有的UISearchDisplayController委托方法是相同的,那2个方法是

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

这告诉代表用户改变了搜索文字。

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

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

,请注意这些方法都打过几次电话,我的意思是为每个字符添加并在搜索栏中删除,因为你是零每次searchFetchedResultsController设置为搜索文本改变

注释掉这一部分,将工作做好

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

我要把我的代码在几秒钟之,但其98%同上 – ItsASecret

+0

确定链接的答案,现在什么都在涨!:-) – ItsASecret

+0

很酷,让我检查一下,坚持 – Charan