Saya menggunakan NSPredicate untuk catatan penelusuran dari tableView.
Di bawah ini adalah kode saya yang telah saya terapkan.

-(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 saya:

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";
}
)  

Aplikasi saya mogok ketika saya menggunakan kode di atas.

Menghentikan aplikasi karena pengecualian yang tidak tertangkap 'NSUnknownKeyException', alasan: '[ valueForUndefinedKey:]: kelas ini tidak sesuai dengan kode nilai kunci untuk nama tampilan kunci.'

Terima kasih sebelumnya.

0
Mihir Oza 23 Januari 2020, 13:32

2 jawaban

Jawaban Terbaik

TableData Anda berisi array kamus, jadi di sini pencarian terjadi langsung di array bukan string, jadi gunakan seperti

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

Dari pada

NSPredicate *resultPredicate;
    resultPredicate = [NSPredicate predicateWithFormat:@"displayname contains[c] %@", searchText];
    NSLog(@"%@",[tableData valueForKey:@"displayname"]);
    filteredUsers = [[tableData valueForKey:@"displayname"] filteredArrayUsingPredicate:resultPredicate];
1
Anbu.Karthik 23 Januari 2020, 10:45

Coba kode di bawah ini.

filteredUsers = [temp filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"displayname CONTAINS[c] %@", searchText]];
[self.tblMemberList reloadData];

Dan Anda melewatkan larik displayname dalam kode Anda untuk memfilternya. Jika Anda ingin melakukan operasi hanya pada larik larik displayname. maka Anda bisa melakukannya seperti di bawah ini.

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

Saya harap ini akan membantu Anda.

1
HardikS 23 Januari 2020, 10:53