Objective-C:NSFetchedResultsSectionInfoの[sectionInfo名] dateFormattedする必要があります
-
20-09-2019 - |
質問
私は、次のコードを持っています:
-(NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *sectionName = [sectionInfo name];
NSLog(@"sectionName %@", sectionName);
NSString *convDate = [dateFormatter stringFromDate: (NSDate *)sectionName];
NSLog(@"convDate %@", convDate);
return [NSString stringWithFormat:@"%@", [sectionInfo name]];
}
私は基本的にはよりよい探して短い文字列に「2009-12-04 00:00:00 1100」のような文字列の日付であるtitleforheaderinsectionを変換する必要がしています。だから私はそれがたDateFormatter setDateStyleのようなものを使用して変換しようとしているが、私のNSLog出力をコンソールにするとき、私は以下のようになります。
2009-12-22 09:42:10.156アプリ[94614:207] 2009-12-04午後12時00分00秒1100をセクション名 2009-12-22 09:42:10.157アプリ[94614:207] convDate(NULL
もちろんconvDateは何も得ていないが、[sectionInfo名]は文字列でなければなりません。私は、独自のNSStringの変数にそれを解析されているので、なぜ私はそれでたDateFormatterを実装カント?
<時間>もう少し情報:私は、コードスニペットされた状態で、以前に他のものの中で日付を解析ます:
if ([currentElement isEqualToString: @"date"]) {
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setDateFormat:@"eee, dd MMM yyyy"];
NSDate *convDate = [dateFormatter dateFromString:string];
if (self.isComment){
[currentComment setDate: convDate];
}else if (self.isPost)
NSLog(@"convDate is %@", convDate);
[currentPost setDate: convDate];
さて、私はこれをデバッグするとき、基本的に生の文字列は「土、2009年11月27日午前17時16分00秒-800」ですが、私はconvDateを見たときには、「2009年11月27日午後12時であることを出てきます:00 1100" 。わからない理由が、どのような場合には、保存されます厥。私は私が他のタイプにたDateFormatter形式を変更した場合、それはアップ詰め込むうとconvDateがnilになるので、それは、私が言及したスタイルにマッチするだろうと思っているだろう。
私のPostControllerを振り返って:私は、関心のあるいくつかのスニペットを持っています:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Post" inManagedObjectContext: ApplicationController.sharedInstance.managedObjectContext]];
NSArray *sortDescriptors = nil;
NSString *sectionNameKeyPath = @"date";
NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(PostSite.name like '%@')", self.site.name]];
[fetchRequest setPredicate:pred];
sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]
initWithKey:@"date" ascending:NO] ];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:
ApplicationController.sharedInstance.managedObjectContext
sectionNameKeyPath:sectionNameKeyPath cacheName:@"PostCache"];
}
return fetchedResultsController;
}
私は日付でソートすることを望んで、そしてアップ私のコードでは、titleForHeaderInSectionでいます、より多くの体裁見て、私の文字列の日付をフォーマットします。
みんなありがとう。
解決
解析中にあなたが日付の書式を設定しているので、あなたが予期しない動作を取得した理由がある。
[dateFormatter setDateFormat:@"eee, dd MMM yyyy"];
日付の時間差があった理由は何時間情報を、持っていないこれます。
また、あなたがconvDate
を設定し、解析中に
NSDate *convDate = [dateFormatter dateFromString:string];
NSDateを記憶していると、それはNSStringのではないので、の決定的のNSFetchResultsControllerはdescription
にconvDate
セレクタを呼び出している。
私はNSDateFormatterは、ISO日付形式を認識できなかった理由を全くわからない。
他のヒント
あなたのコードが動作しない理由は、
であります[sectionInfo name]
によって要求されるNSStringのオブジェクトではなく、NSDateオブジェクトを返します
[dateFormatter stringFromDate:];
あなたは、単にNSDateにNSStringのをキャストすることはできません。
その代わり、
- (NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
NSString *sectionName = [sectionInfo name];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *convDate = [dateFormatter stringFromDate:[dateFormatter dateFromString:sectionName]];
[dateFormatter release];
return convDate;
}
そうする特別な理由がない限り、また、オブジェクトを自動解放しません。
私は HTTPに行くことによって解決策を見つけました。 COM /ココア/日付フォーマッタ-例はテイク-2.html をして使用してます。http:私は変数が入ってくる文字列
と一致することが確実になるまで//unicode.org/reports/tr35/#Date_Format_Patternsがガイドとしてを、私は私のコードをデバッグ