我从uitableview
加载了nsmutablearray
数据,但我想要过滤。数据加载完美但现在我需要对它应用过滤功能并重新加载表。到目前为止,这是我的代码,我写的是过滤,但它没有工作
NSPredicate *sPredicate;
for (int i=0; i<TableArray.count; i++) {
float hotelDistanceFloat = [[[TableArray objectAtIndex:i]xmlhotel_distance] floatValue];
NSInteger hotelPrice = [[[TableArray objectAtIndex:i]xmlhotel_price] integerValue];
sPredicate = [NSPredicate predicateWithFormat:@"(%ld <= %d AND %f <= %d)" , (long)hotelPrice, numberOfBudget, hotelDistanceFloat,numberOfDistance];
TableArray = [[TableArray filteredArrayUsingPredicate:sPredicate] mutableCopy];
}
numberOfBudget
和numberOfDistance
是从uislider获取的简单int值。 TableArray
是我的mutablearray,其中包含所有tabledata。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return TableArray.count;
}
这些是我的nsmutablearray包含的值
NSLog(@"Name : %@",[[TableArray objectAtIndex:1]xmlhotel_name]);
NSLog(@"City : %@",[[TableArray objectAtIndex:1]xmlhotel_city]);
NSLog(@"Price : %@",[TableArray objectAtIndex:1]xmlhotel_price);
NSLog(@"Distance : %@",[TableArray objectAtIndex:1]xmlhotel_distance);
NSLog(@"Image : %@",[[TableArray objectAtIndex:1]xmlhotel_image]);
NSLog(@"Stars : %@",[[TableArray objectAtIndex:1]xmlhotel_stars]);
所有这些值都是STRINGS
答案 0 :(得分:1)
您可能删除for循环,您不需要每次都分配数组并创建谓词。
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"(xmlhotel_price.intValue <= %d AND xmlhotel_distance.floatValue <= %f)", numberOfBudget, numberOfDistance];
NSMutableArray *filteredArray = [NSMutableArray arrayWithArray:[TableArray filteredArrayUsingPredicate:sPredicate]];
答案 1 :(得分:0)
我不确定您面临的确切问题,但这种代码的安静看起来很可疑:
NSPredicate *sPredicate;
for (int i=0; i<TableArray.count; i++) {
float hotelDistanceFloat = [[[TableArray objectAtIndex:i]xmlhotel_distance] floatValue];
NSInteger hotelPrice = [[[TableArray objectAtIndex:i]xmlhotel_price] integerValue];
sPredicate = [NSPredicate predicateWithFormat:@"(%ld <= %d AND %f <= %d)" , (long)hotelPrice, numberOfBudget, hotelDistanceFloat,numberOfDistance];
TableArray = [[TableArray filteredArrayUsingPredicate:sPredicate] mutableCopy];
}
您应该使用包含字典的数组并将谓词的过滤器应用于该数组。为了对内容进行排序,不需要循环。
一旦获得过滤后的数组,就重新加载表格。
答案 2 :(得分:0)
你的错误
你应该怎么做:
_
var slug = product.details.slug