我有一个包含字典和字符串数组的数组 我想用字典值过滤, 但是,当我正在进行过滤时,只有当我在文本字段中键入第一个字母时才会得到结果我已经为nspredicate搜索编写了此代码 我还附上了NSarry的屏幕截图,其中包含我用于过滤的值。
以下是搜索数组的代码:
- (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;
}
这是screennap for array
答案 0 :(得分:0)
你有一系列混合类型(NSString
和NSDictionary
),这通常是一个非常糟糕的主意(并且在Swift中无法实现)。
如果由于某种原因无法控制这一点并且确实需要对其进行过滤,则需要检查您是否根据类型进行了正确比较:
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];
但是,如果可以,真的重新考虑同一阵列中的混合类型,它可能会导致问题。