0

実際、私は1 つのセクションしか使用していません。コアデータに保存されているデータを日付順に並べ替えます。

2 つのセクション( latesthistory )が必要です。私の最初のセクション「最新」には最新の日付を入れたいし、他のセクション「歴史」には日付でソートされた他の日付を入れたい。

私のテーブルは編集可能で、NSFetchedResultsController を使用しています。

numberOfRowsInSectionのサンプルコードは次のとおりです。

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Info"
                                    inManagedObjectContext:self.managedObjectContext]];

    // Define how we want our entities to be sorted
    NSSortDescriptor* sortDescriptor = [[[NSSortDescriptor alloc]
                                    initWithKey:@"date" ascending:NO] autorelease];
    NSArray* sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor, nil] autorelease];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSString *lower = [mxData.name lowercaseString];
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(name = %@)", lower];

    [fetchRequest setPredicate:predicate];

    NSError *errorTotal = nil;
    NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&errorTotal];

    if (errorTotal) {
        NSLog(@"fetch board error. error:%@", errorTotal);
    }

    return [results count];

    [fetchRequest release];
    [results release];
}
4

2 に答える 2

1

UITableViewDataSource指定した" "オブジェクトを変更して、 " numberOfSectionsInTableView:"メソッドの"2"を返す必要があります。

次に、インデックスパスで指定されたセクションに応じて、" tableView:cellForRowAtIndexPath:"メソッドで正しいものを返す必要があります。

オプションのセクションタイトル(「履歴」や「最新」など)が必要な場合は、を介してセクションタイトルの配列を返すこともできますsectionIndexTitlesForTableView:

于 2012-12-13T22:18:56.400 に答える
1

埋め込む- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

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

このようにして、tableviewController は作成するセクションの数を認識します。このメソッドを実装しない場合、デフォルトのセクション数である 1 が作成されます。

このメソッドは、テーブル ビューのセクション数を返すようにデータ ソースに要求します。

デフォルト値は 1 です。

完全なメソッドの説明はここにあります

アップデート:

テーブルビューが特定のインデックス パスに対してどのセルを表示するかを尋ねてきた場合、セルに正しいデータを与えることができます。最新行と履歴行のタイトルを含む 2 つの NSArray があると仮定すると、次のことができます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //create cell
    static NSString *CellIdentifier = @"MyCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if(indexPath.section == 0){
        //set title for latest
        NSString *title = [[self latestTitles] objectAtIndex:indexPath.row];
        [[cell textLabel] setText:title];
    }else{
        //set title for history
        NSString *title = [[self historyTitles] objectAtIndex:indexPath.row];
        [[cell textLabel] setText:title];
    }
    
    //Update: add NSLog here to check if the cell is not nil..
    NSLog(@"cell = %@", cell);

    return cell;
}
于 2012-12-13T22:21:06.453 に答える