我正在使用 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];
}
}
我的表数据
:
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";
}
)
当我使用上面的代码时,我的应用程序崩溃了。
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key displayname.'
提前致谢。
最佳答案
你的 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];
关于ios - 当我使用 NSPredicate 为我的 UITableView 过滤我的数组时,应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876441/