首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带块的NSPredicate -它是如何工作的

问带块的NSPredicate -它是如何工作的
EN

Stack Overflow用户
提问于 2014-09-29 14:55:09
回答 1查看 3.6K关注 0票数 0

我的应用程序中有一个搜索机制,到目前为止,NSPredicate的一个对象被用来过滤对象。

我很困惑,因为魔法发生在我的程序运行时。在我的程序中,有一个具有名称的数组和另一个具有已过滤的名称声明为属性的可变数组。

代码语言:javascript
复制
@property (strong, nonatomic) NSArray *names;
@property (strong, nonatomic) NSMutableArray *filteredNames;

在加载视图时,我用名称初始化数组。

代码语言:javascript
复制
self.names = @[
               @"Aeron",
               @"Brandon",
               @"Chris",
               @"David",
               @"Elvis",
               @"Francisco",
               @"George",
               @"Oliver",
               @"Lary",
               @"Neythan",
               @"Marcus",
               @"Phil"
               ];

然后,我设置了一个表视图及其内容,安装搜索机制(使用iOS 8的一个,即UISearchController)。接下来,我实现了UISearchResultsUpdating协议,下面介绍了我的updateSearchResultsForSearchController:。

代码语言:javascript
复制
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    NSString *input = searchController.searchBar.text;
    if (input.length > 0) {
        [self.filteredNames removeAllObjects];

        NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
            NSLog(@"Got [%@] string.", evaluatedObject);
            NSRange range = [evaluatedObject rangeOfString:input options:NSCaseInsensitiveSearch];
            return range.location != NSNotFound;
        }];

        NSArray *matches = [self.names filteredArrayUsingPredicate:predicate];
        [self.filteredNames addObjectsFromArray:matches];

        [((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];
    }
}

所以它工作得很完美。但是我想知道,为什么我要在块中迭代数组中的名字呢?我知道块是好的,因为它们指定将帧从包含所有变量和特定值的堆栈中保存到过去,因此它们可以在最近执行。但是为什么这个块要迭代这个特定的数组呢?我试图声明一个新的集合并初始化它(因为我认为它接受了所有的集合和它们的值),但是它没有工作。

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-29 15:05:54

要筛选数组,必须遍历每个元素,并对谓词块进行测试。我相信你正在经历的行为是故意的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26102807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档