0

这是我的代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger numberOfRowsPerSection = 0;

    if (section == 0) {
        for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
            BNRItem *item = [[[BNRItemStore sharedStore] allItems] objectAtIndex:i];
            if ([item valueInDollars] > 50) {
                numberOfRowsPerSection ++;
            }
        }
    }else{
        for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
            BNRItem *item = [[[BNRItemStore sharedStore] allItems] objectAtIndex:i];
            if ([item valueInDollars] == 73) {
                numberOfRowsPerSection ++;
            }
        }
    }

    return numberOfRowsPerSection;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];

    if (!cell) {
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
    }

    BNRItem *p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];
    if ([p valueInDollars] > 50 && indexPath.section == 0) {
        [[cell textLabel] setText:[p description]];
    }else if(indexPath.section == 1){
        [[cell textLabel] setText:[p description]];
    }


    return cell;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

我想在一个部分显示结果 > 50,另一部分显示其余结果,但我不知道该怎么做。我在每个部分都得到重复的结果。

谢谢

4

2 回答 2

1

您的代码没有反映您所描述的内容( > 50 和 == 73 有点相交):

if (section == 0) {
    for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
        ...
        if ([item valueInDollars] > 50) {
            ...
        }
    }
}else{
    for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
        ...
        if ([item valueInDollars] == 73) {
            ...
        }
    }
}

这条线也不正确:

BNRItem *p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];

因为 indexPath.row 将与 indexPath.section 一起使用(这意味着该行相对于该部分,而不是整个表)。这是导致两个部分的结果相同的问题的主要原因。

无论如何,我对您的建议是执行预处理步骤(可能在 viewDidLoad 或其他地方)将您的数组拆分为 2 个数组(每个部分一个),而不是两个部分只使用一个数组。

于 2012-07-06T06:52:39.833 回答
0

如果您使用的是NSFetchedResultsController,您可以使用sectionNameKeyPath:参数来指定“分组依据”参数。在您的情况下,您可能只需为数组中的对象创建一个简单的 0/1 属性。

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                    managedObjectContext:_managedObjectContext 
                                      sectionNameKeyPath:@"threshold"
                                               cacheName:@"Root"];
于 2012-07-06T06:49:27.053 回答