0

私はアップルのウェブサイトまたはここからのcoredatabooksソースコードの例で遊んでいます。書籍の著作権の日付属性値を設定して、著者をテーブルビューセクションヘッダーとして置き換えようとしています。日付値を静的にする必要があります。つまり、時間を必要としません。そうしないと、すべての日付値が異なり、日付値の時間部分が変更されているため、同じ日付の下に同じ月日と同じ年の著作権日付が並んでいる2冊の本のオブジェクトはありません...

セクションヘッダーに表示する日付ピッカーの日付値をフォーマットするRootViewController.mファイルのコードは次のとおりです。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *rawDateStr = [[[fetchedResultsController sections] objectAtIndex:section] name];

//convert default date string to NSDate...
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZ"];
NSDate *date = [formatter dateFromString:rawDateStr];

//convert NSDate to format we want...
[formatter setDateFormat:@"EEEE MMMM d"];
NSString *formattedDateStr = [formatter stringFromDate:date];

return formattedDateStr;

}

これは問題なく出力されますが、同じ著作権の月日と年の本を同じセクションにグループ化することはできません。これも(私が想定しているように)日付の値にも時間が含まれているためです。datepickerからの日付値の実際の保存は、EditingViewController.mファイルで次のように実行されます。

 - (IBAction)save {

// Pass current value to the edited object, then pop.
if (editingDate) {
    [editedObject setValue:datePicker.date forKey:editedFieldKey];
}

saveメソッドは現在、日付をそのままdatepickerから取得します。そのため、コードを変更して、最初にdatepickerの日付をローカル変数にコピーし、そこで時間を空白にしてから、setValueステートメントでその値を使用してグループ化するにはどうすればよいですか。正しく?助けてください!ありがとう

4

1 に答える 1

2

日付には本質的に時間が含まれているため、オブジェクトを に変換し、 を空白にしてから、それらの日付コンポーネントを NSDate に変換して戻すことにより、オブジェクト自体を変更する必要がありますNSDateNSDateComponentHH:mm:ss

例えば:

NSDate * aDate = [NSDate date];
NSDateComponents * components = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:aDate];
NSDate * convertedDate = [[NSCalendar currentCalendar] dateFromComponents:components];

これを行うと、タイムゾーンのオフセットなどが失われるため、その副作用を考慮する必要がある場合があります。

このメソッドの良いところは、文字列がどのようにフォーマットされているかに関係なく機能することです (これは信頼するには脆弱です)。

于 2009-12-02T18:37:44.207 に答える