当前位置: 首页 > 知识库问答 >
问题:

NSPredicate不返回正确的结果

章岳
2023-03-14

我正在尝试在代码中使用NSPredicate搜索名称。搜索工作正常,但不会返回适当的结果。当我搜索一个名称(例如“Colin”)时,它会返回表中的所有其他名称或另一个名称(例如“Mike”),但如果我输入一个不存在的随机字符串,它会返回:“找不到结果”。当我在搜索栏中键入一个名字(例如Lisa)时,我希望它能找到这个名字(Lisa)并返回它,但它没有这样做

这是我的代码:

- (void)filterData {

[self.filteredSearch removeAllObjects];

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS [cd] %@",  mySearchBar.text];

self.filteredSearch = [[self.name filteredArrayUsingPredicate:predicate] mutableCopy];

}

自己name返回表中的所有名称,并从属性列表中获取

NSString *path = [[NSBundle mainBundle] pathForResource:@"lecturers" ofType:@"plist"];


lecturers= [[NSDictionary alloc] initWithContentsOfFile:path];

// Allocate key objects from lecturers list
name = [lecturers objectForKey:@"name"];


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

[self filterData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.tableView) {
    return self.name.count;
}
[self filteredSearch];

return self.filteredSearch.count;
}

我怎样才能解决这个问题?我尝试过使用自匹配和其他非预测格式,但它们似乎不起作用。

共有1个答案

贺恩
2023-03-14

请确认“searchText”有值。在控制台窗口中打印搜索文本。

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

self.filteredSearch removeAllObjects];

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd]%@",  searchText];

self.filteredSearch = [[self.name filteredArrayUsingPredicate:predicate] mutableCopy];

[self.tableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 return self.filteredSearch.count;
}
 类似资料:
  • 我正在使用postgis计算两个地理坐标之间的距离。 它返回给我53536.743496517米,大约等于54公里,但实际距离是103公里,我通过http://boulter.com/gps/distance/ 我在询问中是否做错了什么?

  • 以下是我的疑问.... 我没有结果。 另外,我正在使用这个插件来生成请求正文。 我的查询如下所示.. null 感谢您到目前为止的阅读,如果有人能帮助我找出如何使这一工作,我将非常感谢。

  • 问题内容: def size_of_dir(dirname): print(“Size of directory: “) print(os.path.getsize(dirname)) 是有问题的代码。dirname是一个目录,其中包含 130个 文件,每个文件约 1kb 。当我调用此函数时,它返回 4624 ,这 不是 目录的大小…为什么? 问题答案: 此值(4624B)代表的大小 文件 是 描

  • 我们计划在客户机-服务器模式下使用Infinispan。该架构有许多客户端(客户端1、客户端2等)和分布式infinispan网络。 我们需要定期更新缓存中的数据,比如每5小时更新一次。所有客户端都可以更新数据。如果其中一个(比如客户端1)正在更新,我们需要防止其他人做同样的工作。更新完成后,所有客户端再等待5个小时,其中任何一个客户端都将再次进行更新。 Infinispan为此提供了版本化操作,

  • 当我尝试使用Google geocode api对其中一个地址进行地理编码时,Google api返回了一个错误的位置。 搜索地址:爱沙尼亚共和国 结果来自google api:西班牙 我正在使用javascript Google api对地址进行地理编码。对于其他位置,结果是正确的,但对于上述地址,结果是不正确的。 如果我们在浏览器中输入下面的url,我们会得到JSON,它会在西班牙的某个地方显

  • 据我所知,Java中的运算符比较对象的引用()。 此值是中方法的默认实现返回的值。 方法有一个实现说明: 为什么和 而且,一个极度厌恶风险的人如何确保上面的假阳性永远不会发生?如果类至少有一个非静态字段,则可以重写和。但是,如果不是这样(就像上面的类一样)呢? 你能解释一下我在这里漏掉了什么吗? 为添加API注释(取自Silvio的答案): 这通常是通过将对象的内部地址转换为整数来实现的,但Jav