原谅我 - 这是iOS8前的旧学校 - 仍然在从UISearchDisplayController
升级应用程序UISearchController
的过程。
所以牢记这一点,让我们先来定义一些属性开始...
一个可变的数组变量:
@property (nonatomic, retain) NSMutableArray *searchResults;
和几个字符串变量:
@property (nonatomic, strong) NSString *stringSearchBarText;
@property (nonatomic, strong) NSString *searchAttribute;
的searchAttribute
属性设置为在我的代码中启用控制器多态性,但您可以将其设置为Static
或使用setter分配值。
然后用这个(预iOS8上)UISearchDisplayController
委托方法:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
// Set search predicate and filter array
if (searchString && searchString.length) {
[self setStringSearchBarText:searchString];
NSPredicate *searchPredicate = nil;
NSArray *fetchedObjects = nil;
NSMutableArray *arrayResults = nil;
[self.searchResults removeAllObjects];
searchPredicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", self.searchAttribute, searchString];
fetchedObjects = self.fetchedResultsController.fetchedObjects;
arrayResults = [NSMutableArray arrayWithArray:[fetchedObjects filteredArrayUsingPredicate:searchPredicate]];
[self setSearchResults:arrayResults];
}
// Return YES to reload the search result table view
return YES;
}
OR
更简单地回答你的问题,不要运行其他抓取,只需将你的数据已经提取到NSMutableArray
并使用便捷方法filteredArrayUsingPredicate:
过滤该数据。更便宜,更容易。
而且,它可能是值得指出的是,我们不应该害怕的大型数据集,因为有一些机制来控制数据的大小设置您最初获取。
对于我来说,这并不比我在书中的实用书架 - “核心数据,第二版,适用于iOS,OS X和iCloud的数据存储和管理”(2013年1月)Marcus S. Zarra ,特别是第4章标题为“性能调优”。
IMO名列榜首在核心数据了坚实的教育。
#Josh,感谢您的回答。对我来说,在我第一次显示所有的数据到表中,但如果用户点击过滤器,那么只有我必须执行过滤功能。 – iKT 2015-03-19 08:42:16