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 を超える結果を 1 つのセクションに表示し、残りの結果を別のセクションに表示したいのですが、その方法がわかりません。各セクションで結果が重複しています。

ありがとう

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 行]];

indexPath.row は indexPath.section を使用するためです (これは、行がテーブル全体ではなく、セクションに対して相対的であることを意味します)。これが、両方のセクションで同じ結果になる問題の主な原因です。

とにかく、私の提案は、両方のセクションに 1 つの配列のみを使用するのではなく、配列を 2 つの配列 (セクションごとに 1 つ) に分割する前処理ステップ (おそらく viewDidLoad または他の場所) を実行することです。

于 2012-07-06T06:52:39.833 に答える
0

NSFetchedResultsControllerを使用している場合は、sectionNameKeyPath:引数を使用して「group-by」パラメーターを指定できます。あなたの場合、配列内のオブジェクトに単純な 0/1 プロパティを作成するだけかもしれません。

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