2015-04-16 18 views
5

sözlük ve dizesi dizisini içeren bir dizilim var ve sözlük değeriyle filtrelemek istiyorum, Ancak filtreleme yaparken yalnızca ilk harfi yazdığımda sonuç alıyorum metin alanı nspredicate arama için bu kodu yazdım Ayrıca filtreleme için kullandığım NSarry içeren değerler için ekran görüntüsü ekledim.Filter Array of Dictionary ve string

İşte
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text 
{ 

    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    NSLog(@"%@",searchStr); 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@ ",searchStr]; 
    NSArray *filteredArr = [arrmainData filteredArrayUsingPredicate:predicate]; 
    detailListArray=[[NSMutableArray alloc]initWithArray:filteredArr]; 
    [tblGlosary reloadData]; 

    return true; 
} 

genellikle gerçekten kötü dizisi için ScreenSnap

enter image description here

cevap

0

Sen karışık türleri (NSString ve NSDictionary) bir dizi var: İşte

arama dizinin kodudur fikir (ve Swift'de mümkün olmayacaktır).

Eğer siz doğru türüne bağlı karşılaştırın kontrol etmek gerek içinden filtre gerekir gerçekten bu kontrol edemez nedense: Eğer gerçekten yeniden gözden eğer tekrar

NSIndexSet *matches = [arrmainData indexesOfObjectsPassingTest:BOOL^(id obj, NSUInteger idx, BOOL *stop) { 
    NSString *stringToCompare = nil; 

    if ([obj isKindOfClass:[NSString class]]) { 
     stringToCompare = (NSString *)obj; 
    } else { 
     NSDictionary *dict = (NSDictionary *)obj; 
     stringToCompare = dict["Name"]; 
    } 

    return [stringToCompare rangeOfString:searchString].location != NSNotFound; 
}]; 

NSArray *filteredArray = [arrmainData objectsAtIndexes:matches]; 

Ama Aynı dizide karıştırma türleri, muhtemelen yolda sorunlara yol açacaktır.

İlgili konular