我正在使用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 = "[email protected]";
uuid = "user-97ae136";
},
{
displayname = OzaMihir;
email = "[email protected]";
uuid = "user-0c97f16";
}
)
当我使用上述代码时,我的应用程序崩溃。
由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:此类与键显示名的编码不兼容。
提前感谢。
您的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];
尝试下面的代码。
filteredUsers = [temp filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"displayname CONTAINS[c] %@", searchText]];
[self.tblMemberList reloadData];
并且您正在代码中传递displayname
数组以对其进行过滤。如果只想对displayname
数组的数组执行操作。那么您可以按照以下步骤进行操作。
//It will perform operation/search name only on an array of `displayname`
filteredUsers = [[tableData valueForKey:@"displayname"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchText]];
[self.tblMemberList reloadData];
希望对您有帮助。