我想用谓词过滤数组并在tableView中显示它,数组的每一行都应该显示在一个部分中,但是当我运行我的应用程序时没有显示任何内容。 当我尝试使用未经过滤的数组时,它可以工作。我不知道该怎么办,因为两个数组具有相同的结构,唯一的区别是未过滤的数组包含17个对象,而过滤的数组包含11个。 这是我的代码:
在viewDidLoad中:
//itemsArray gets filled like this:
NSMutableArray *itemsArray = [[NSMutableArray alloc] init];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:abfahrt,@"Abfahrt",ankunft,@"Ankunft",nil];
[items addObject:dict];
//Date converted to string
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
NSString *stringDate = [dateFormatter stringFromDate:gDate];
//filtered with stringDate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Abfahrt < %@", stringDate];
filteredArray = [itemsArray filteredArrayUsingPredicate:predicate];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return filteredArray.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ErgebnisCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UILabel *abfahrtLabel = (UILabel *)[cell viewWithTag:1];
UILabel *ankunftLabel = (UILabel *)[cell viewWithTag:2];
abfahrtLabel.text = [[filteredArray objectAtIndex:indexPath.section] objectForKey:@"Abfahrt"];
ankunftLabel.text = [[filteredArray objectAtIndex:indexPath.section] objectForKey:@"Ankunft"];
return cell;
}
答案 0 :(得分:0)
听起来您的filteredArray是空的,这意味着您的谓词会排除列表中的所有内容。 在filteredArray线上放置一个断点,看看那里有什么。
或者,在numberOfSectionsInTableView中放置一个断点,然后查看filteredArray.count是什么。如果它为零,那么调整你的谓词,直到你的一些条目可以通过。
您还可以找到NSStringClassReference的“标识和比较字符串”部分下列出的方法,以帮助您形成所需的谓词。特别是任何“比较”方法。