首页 > 解决方案 > 当我使用 NSPredicate 为我的 UITableView 过滤我的数组时应用程序崩溃

问题描述

我正在NSPredicate使用tableView.
下面是我已经实现的代码。

-(void)updateSearchArray:(NSString *)searchText {
    if(searchText.length==0) {
        isFilter=NO;
    } else {
        isFilter=YES;
        filteredUsers = [[NSMutableArray alloc]init];
        NSPredicate *resultPredicate;
        resultPredicate = [NSPredicate predicateWithFormat:@"displayname contains[c] %@", searchText];
        NSLog(@"%@",[tableData valueForKey:@"displayname"]);
        filteredUsers = [[tableData valueForKey:@"displayname"] filteredArrayUsingPredicate:resultPredicate];
        [self.tblMemberList reloadData];

    }
}  

我的tableData

Printing description of self->tableData:
<__NSArrayI 0x28116ba60>(
{
    displayname = Mihir;
    email = "ozam@abc.com";
    uuid = "user-97ae136";
},
{
    displayname = OzaMihir;
    email = "om@abc.com";
    uuid = "user-0c97f16";
}
)  

当我使用上面的代码时,我的应用程序崩溃了。

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合键显示名称的键值编码。”

提前致谢。

标签: iosobjective-cnsmutablearraynsdictionarynspredicate

解决方案


你的 tableData 包含字典数组,所以在这里搜索直接在数组中发生而不是字符串,所以像这样使用

    isFilter=YES;
    filteredUsers = [[NSMutableArray alloc]init];
   filteredUsers = [tableData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(displayname contains[c] %@)", searchText]];
    [self.tblMemberList reloadData];

代替

NSPredicate *resultPredicate;
    resultPredicate = [NSPredicate predicateWithFormat:@"displayname contains[c] %@", searchText];
    NSLog(@"%@",[tableData valueForKey:@"displayname"]);
    filteredUsers = [[tableData valueForKey:@"displayname"] filteredArrayUsingPredicate:resultPredicate];

推荐阅读