如何将一个数组添加到UITableView的2个部分中

时间:2012-07-06 06:30:47

标签: ios uitableview

这是我的代码:

- (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;
}

我想在一个部分中显示结果&gt; 50和其他部分结果的其余部分但我不知道该怎么做。我在每个部分都得到了重复的结果。

由于

2 个答案:

答案 0 :(得分:1)

您的代码并未反映您所描述的内容(&gt; 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个数组(每个部分一个),而不是只为这两个部分使用一个数组。

答案 1 :(得分:0)

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

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                    managedObjectContext:_managedObjectContext 
                                      sectionNameKeyPath:@"threshold"
                                               cacheName:@"Root"];