5

Core Dataアプリでは、FetchedResultsControllerを使用しています。通常、UITableViewでヘッダーのタイトルを設定するには、次のようなメソッドを実装します。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
    return [sectionInfo name];
}

ここで、[sectionInfoname]はNSStringを返します。

私のsectionKeyPathはNSDateに基づいており、これは、セクションヘッダーを除いてすべて正常に機能します。これは、生の日付記述文字列(たとえば、12/12/2009 12:32:32 +0100)であり、ヘッダ!

したがって、これに日付フォーマッターを使用して「2010年4月17日」のような素敵なヘッダーを作成したいのですが、これはNSStringであるため、[sectionInfoname]では実行できません。何か案は?

どうもありがとう

4

3 に答える 3

14

私は解決策を見つけました:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    //Returns the title for each section header. Title is the Date.
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    NSArray *objects = [sectionInfo objects];
    NSManagedObject *managedObject = [objects objectAtIndex:0];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterMediumStyle];
    NSDate *headerDate = (NSDate *)[managedObject valueForKey:@"itemDate"];
    NSString *headerTitle = [formatter stringFromDate:headerDate];
    [formatter release];
    return headerTitle;
}

これをよく読んでください。より良い方法を知っている場合は、教えてください。

そうでなければ、同様の問題で立ち往生している場合、これが役立つことを願っています!

于 2010-04-17T21:54:05.187 に答える
1

iOS 4.0 以降では、[NSDateFormatter localizedStringFromDate] クラス メソッドを使用すると、NSDateFormatter インスタンスの管理について心配する必要がなくなります。それ以外の場合は、これが唯一の方法のようです。

于 2011-04-13T02:00:17.350 に答える