2

私はコインアプリに取り組んでいます。コインは、Core Data によって管理されるテーブルビューでユーザーに提示されます。

コイン名はすべて「19」または「20」で始まります。テーブル ビューにセクション インデックスを実装すると、インデックスに "1" と "2" しか表示されません。「1」を押すとテーブルが「1900」コインに移動し、「2」を押すと「2000」コインに移動します。その理由はわかっています。名前フィールドの最初の数字から来ています。

私が欲しいのは「1910」、「1920」、「1930」などで、ユーザーは10年にジャンプできます。

モデルに「titleForSection」という属性を追加し、「1910」、「1920」などを入力して、取得リクエストで sectionNameKeyPath を @"titleForSection" 属性に設定しました。言うまでもなく、うまくいきません。

セクション インデックスを name 属性の最初の 4 桁にする方法を知っている人はいますか?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [[fetchedResultsController sections] count];
}


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

    if (self.searchIsActive) {
        return [self.filteredListContent count];
    }

    NSInteger numberOfRows = 0;

    if ([[fetchedResultsController sections] count] > 0) {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
        numberOfRows = [sectionInfo numberOfObjects];
    }

    return numberOfRows;

}



//for index
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

    return [fetchedResultsController sectionIndexTitles];

}


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {

    return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}

- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController != nil) {
        return fetchedResultsController;

    }

    // Create the fetch request for the entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Coins" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    //set batch size
    [fetchRequest setFetchBatchSize:20];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"titleForSection" cacheName:nil];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;

    [aFetchedResultsController release];
    [fetchRequest release];
    [sortDescriptor release];
    [sortDescriptors release];

    return fetchedResultsController;
}

アップデート:

「titleForSection」属性を文字列から数値に変更し、データベースに 1900 年から 2010 年まで、10 年単位でデータを入力しました。現在、テーブル インデックスは「0」、「1」、および「2」のみで表示されます。そこに数字を入れられない理由がわかりません!

4

2 に答える 2

0

UITableViewControllerでオーバーライドする必要があります– sectionIndexTitlesForTableView:。次のようにしてみてください:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    [array addObject:@"1920"];
    [array addObject:@"1930"];
    [array addObject:@"1940"];
    [array addObject:@"1950"];
    [array addObject:@"1960"];
    [array addObject:@"1970"];

    return array;
}

あなたが興味を持つことができる2番目の方法:

– tableView:sectionForSectionIndexTitle:atIndex:
于 2011-07-04T23:56:57.507 に答える
0

コイン クラスに新しいメソッドを作成するだけです。

-(NSString*)firstFourCharsOfTitle
{
    return [[self titleForSection] substringToIndex:4];
}

NSFetchedResultsController initの「sectionNameKeyPath」にそのメソッドを使用するよりも

NSFetchedResultsController *aFetchedResultsController = 
     [[NSFetchedResultsController alloc] 
           initWithFetchRequest:fetchRequest 
           managedObjectContext:managedObjectContext 
             sectionNameKeyPath:@"firstFourCharsOfTitle" 
                      cacheName:nil];
于 2011-12-04T16:16:58.193 に答える