自定义对象的 NSPredicate 不起作用
NSPredicate for custom objects not working
我有一组自定义对象,_momsArray
。这里显示的是此类数组的单个对象:
Custom *yourMom {
name = @"Sally M. Brown";
age = 54;
weight = 43.2;
}
我 运行 我在 searchBar 委托中的谓词:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if ([searchText length]<=0) {
_tableDataArr = [[NSMutableArray alloc] initWithArray:_momsArray];
} else{
// filtered _tableDataArr
NSString *filter = @"name BEGINSWITH[cd] %@";
NSPredicate* predicate = [NSPredicate predicateWithFormat:filter, searchText];
NSArray *filteredArr = [_momsArray filteredArrayUsingPredicate:predicate];
_tableDataArr = [[NSMutableArray alloc] initWithArray:filteredArr];
}
[_momTable reloadData];
}
这没有给出预期的结果。例如,当我键入 S 时,sally 根本不会出现。我的代码有什么问题?
编辑:自定义对象中的字符串包含标点符号,因此与其他答案不同。
您的字符串未正确生成,因此请使用以下代码:
NSPredicate *predicate = [ NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", text];
arrFilterData = [NSArray arrayWithArray:[arrDataList filteredArrayUsingPredicate:predicate]];
输出
搜索前
搜索后
和代码
NSPredicate *predicate = [ NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", text];
arrFilterData = [NSArray arrayWithArray:[arrDataList filteredArrayUsingPredicate:predicate]];
输出:
Edit
输出:
要使用自定义对象过滤数组,您可以使用此代码。
NSString *str = @"text";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name contains[c] %@", str];
NSArray *arrFiltered = [self.arrDataObject filteredArrayUsingPredicate:predicate];
希望对你有帮助。
使用此代码:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchText];
NSMutableArray *filteredArr = [[_momsArray filteredArrayUsingPredicate:pred]mutableCopy];
我有一组自定义对象,_momsArray
。这里显示的是此类数组的单个对象:
Custom *yourMom {
name = @"Sally M. Brown";
age = 54;
weight = 43.2;
}
我 运行 我在 searchBar 委托中的谓词:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if ([searchText length]<=0) {
_tableDataArr = [[NSMutableArray alloc] initWithArray:_momsArray];
} else{
// filtered _tableDataArr
NSString *filter = @"name BEGINSWITH[cd] %@";
NSPredicate* predicate = [NSPredicate predicateWithFormat:filter, searchText];
NSArray *filteredArr = [_momsArray filteredArrayUsingPredicate:predicate];
_tableDataArr = [[NSMutableArray alloc] initWithArray:filteredArr];
}
[_momTable reloadData];
}
这没有给出预期的结果。例如,当我键入 S 时,sally 根本不会出现。我的代码有什么问题?
编辑:自定义对象中的字符串包含标点符号,因此与其他答案不同。
您的字符串未正确生成,因此请使用以下代码:
NSPredicate *predicate = [ NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", text];
arrFilterData = [NSArray arrayWithArray:[arrDataList filteredArrayUsingPredicate:predicate]];
输出
搜索前
搜索后
和代码
NSPredicate *predicate = [ NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", text];
arrFilterData = [NSArray arrayWithArray:[arrDataList filteredArrayUsingPredicate:predicate]];
输出:
Edit
输出:
要使用自定义对象过滤数组,您可以使用此代码。
NSString *str = @"text";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name contains[c] %@", str];
NSArray *arrFiltered = [self.arrDataObject filteredArrayUsingPredicate:predicate];
希望对你有帮助。
使用此代码:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchText];
NSMutableArray *filteredArr = [[_momsArray filteredArrayUsingPredicate:pred]mutableCopy];