使用predicateWithBlock“NSInvalidArgumentException”,原因:' - [__ NSDictionaryI hasPrefix]“我怎么这个?

时间:2015-05-21 22:11:19

标签: objective-c nsdictionary

我正在尝试设置我的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];
    }

}

1 个答案:

答案 0 :(得分:0)

你需要问问自己fakeData是什么。我的猜测是它是NSDictionary的NSArray。如果我猜对了,这就解释了你得到的错误;在每次遍历谓词块时,evaluatedObject是一个NSDictionary - 你不能对NSDictionary说hasPrefix,就像你试图做的那样。

如果您的NSDictionary有@"name"密钥,那么您会说:

return [[evaluatedObject objectForKey:@"name"] hasPrefix:self.contactSearchBar.text];