当我使用 NSPredicate 为我的 UITableView 过滤我的数组时,应用程序崩溃

App crashes when I use NSPredicate to filter my Array for my UITableView

我正在使用 NSPredicatetableView 中搜索记录。
下面是我已经实现的代码。

-(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];

希望对你有所帮助