2009-07-03 17 views
7

NSManagedObjectContextからオブジェクトをフェッチするNSFetchedResultsControllerがあります。私は結果を使用してUITableViewを生成しています。NSFetchedResultsControllerからUITableViewヘッダーを設定する

私はこれらの2つのソート記述子でフィルタリングしています。

NSSortDescriptor *lastOpened = 
    [[NSSortDescriptor alloc] initWithKey:@"lastOpened" ascending:NO]; 

NSSortDescriptor *titleDescriptor = 
    [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 

そして、私はNSFetchedResultsControllerを作成するとき、私はsectionNameKeyPath:@"lastOpened"経由でセクションを並べ替えます。

現在、私のセクションには2009-07-02 20:51:27 -0400のような標準フォーマットが表示され、2つのファイルを同時に開くことはできないため、すべてが一意です。私は一日のような日付/時間の範囲をカバーし、人間が読める形式にする必要があります。何かのような7月2日木

ありがとうございました!


編集:

これは、すべてのUITableViewController内部です。ここにいくつかのコードがあります。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    // Display the dates as section headings. 
    return [[[fetchedResultsController sections] objectAtIndex:section] name]; 
} 



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

    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; 
    return [sectionInfo numberOfObjects]; 
} 
+0

テーブルを作成するためにバインディングを使用していますか、またはUITableViewのデータソースを作成しましたか? –

+0

質問者がiPhone用に開発しているので、Cocoa Touchには存在しないので、Bindingsにすることはできません。 –

+0

フェッチされた結果コントローラ、btwに 'NSPredicates'を設定して結果をフィルタリングする必要があります。複数の方法を並べ替えることはできますが、特定の「プロパティが真」である(つまり述語が満たされている)特定のオブジェクトのみを表示する場合は、NSPredicatesを使用します。 – jbrennan

答えて

12

NSManagedObjectサブクラスに新しいプロパティdayを追加して、フォーマットされた日付文字列を取得しました。

@property (nonatomic, readonly) NSString * day; 
@property (nonatomic, retain) NSDateFormatter * dateFormatter 

dateFomatterを調整します。 @synthesize dateFormatter;

awakeFromFetchとawakeFromInsertで日付フォーマッタを初期化します。

self.dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

dayのアクセサーです。

- (NSString *)day { 
    NSDate *date = self.startDate; 
    return [self.dateFormatter stringFromDate:date]; 
} 

次に、セクション名のキーパスをdayに設定します。ソート記述子を変更する必要はありません。

0

私はまだSDKのその領域を掘り下げする機会がなかった(iPhoneのものは、私の趣味の時間であるので、私の仕事は、C#のである)が、私が言うことができる何がしたいでしょうから、他のinit、特にinitWithKey:ascending:selector:を使用し、セレクタではセレクタを渡して、年/月/日だけを比較して時間を無視します。ここで

は参照用のURL:iPhone Library Documentation

は、この情報がお役に立てば幸い!

関連する問題