我正在尝试设置我的predicateWithBlock来接收搜索栏的文本,并使用包含这些文本的对象过滤我的NSDictionary的所有结果。 我没有用它然后不知道我做错了什么。
当我在搜索栏中输入内容时,我收到此错误“NSInvalidArgumentException”,原因:' - [__ NSDictionaryI hasPrefix]:无法识别的选择器发送到实例0x79866530“
以下是我的代码:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if (searchText.length == 0) {
self.isFilltered = NO;
}else{
self.isFilltered = YES;
NSPredicate *evenNumbers = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject hasPrefix:self.contactSearchBar.text];
}];
NSArray *filteredArray = [self.fakeData filteredArrayUsingPredicate:evenNumbers];
self.tableData = [@[@{@"rows": filteredArray}] mutableCopy];
[self.dataTableView reloadData];
}
}
答案 0 :(得分:0)
你需要问问自己fakeData
是什么。我的猜测是它是NSDictionary的NSArray。如果我猜对了,这就解释了你得到的错误;在每次遍历谓词块时,evaluatedObject
是一个NSDictionary - 你不能对NSDictionary说hasPrefix
,就像你试图做的那样。
如果您的NSDictionary有@"name"
密钥,那么您会说:
return [[evaluatedObject objectForKey:@"name"] hasPrefix:self.contactSearchBar.text];