2015-04-16 15 views
5

Tôi có một mảng chứa mảng từ điển và chuỗi và tôi muốn lọc bằng giá trị từ điển, nhưng khi tôi lọc thì tôi chỉ nhận được kết quả khi tôi nhập chữ cái đầu tiên trường văn bản tôi đã viết mã này để tìm kiếm nspredicate cũng tôi có kèm theo ảnh chụp màn hình cho NSarry chứa các giá trị mà tôi sử dụng để lọc.Bộ lọc mảng của từ điển và chuỗi

Đây là mã để tìm kiếm mảng:

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

Đây là screensnap cho mảng

enter image description here

Trả lời

0

Bạn có một mảng của các loại hỗn hợp (NSStringNSDictionary) mà nói chung là một thực sự xấu ý tưởng (và sẽ không thể có trong Swift).

Nếu bạn vì một lý do không thể kiểm soát này và thực sự cần phải lọc qua nó, bạn cần phải kiểm tra xem bạn so sánh một cách chính xác tùy thuộc vào loại:

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

Nhưng một lần nữa, nếu bạn có thể, thực sự xem xét lại pha trộn các loại trong cùng một mảng, nó có khả năng sẽ dẫn đến các vấn đề xuống đường.

Các vấn đề liên quan