当我使用 NSPredicate 为我的 UITableView 过滤我的数组时,应用程序崩溃
App crashes when I use NSPredicate to filter my Array for my 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";
}
)
当我使用上面的代码时,我的应用程序崩溃了。
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];
试试下面的代码。
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];
希望对你有所帮助
我正在使用 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";
}
)
当我使用上面的代码时,我的应用程序崩溃了。
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];
试试下面的代码。
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];
希望对你有所帮助