2016-11-03 8 views
0

私は、テキストフィールドとその作成されたdateandtimeからの文字列入力を保存しています。私は文字列データ型であるmessageDateというキーを持つcoredataに日付値を格納しています。私は文字列に私の日付値を変換しcoredata.Iに格納することは私が格納されているテキストとその作成した日付を見ることができていますNSFetchedResultsControllerはcoredataから日付を取得し、UITableviewのtitleForHeaderInSectionに日付を表​​示します。

timeAndDateMsgArr (
    "2016-11-02 17:59 PM", 
    "2016-11-02 18:08 PM", 
    "2016-11-02 18:08 PM" 
) 

textArr (
     "Hai", 
     "The", 
     "I'm" 
    ) 

以下のように格納されている日付とテキスト値の配列を見ることができていますしていますUITableView CustomCellに2つのラベルを追加します。しかし、私は日付でテキストをグループ化する必要があります。私はすでにいくつかのアイデアを得るために写真を投稿する多くのソリューションを試してみましたが、以下のうちの1

- (NSFetchedResultsController *)fetchedResultsController { 

    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"msgHistory" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:@"messageDate" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 

    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil 
                cacheName:@"Root"]; 
    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

    NSLog(@"fetchcontroller %@",_fetchedResultsController); 

    return _fetchedResultsController; 

} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    NSString *rawDateStr = [[[self.fetchedResultsController sections] objectAtIndex:section] name]; 
    NSLog(@"raw %@",rawDateStr); //****** i am getting null value here************// 
    // Convert rawDateStr string to NSDate... 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZ"]; 
    NSDate *date = [formatter dateFromString:rawDateStr]; 

    // Convert NSDate to format we want... 
    [formatter setDateFormat:@"d MMMM yyyy"]; 
    NSString *formattedDateStr = [formatter stringFromDate:date]; 
    return formattedDateStr; 
} 

でいる、現在の出力は私の予想される出力は、私が表示されます以下のようなものになります

enter image description here のようなものです月の日付は enter image description here

ですが、メッセージを日付順に表示する必要があります。私は日付のキーが日付のデータ型に格納されている私の要件に適合するリンゴのサンプルコードを試してみましたが、私のケースでは、私は文字列データ型の日付を格納しています。私の場合、データ型はコードに影響するため変更できません。彼らの代替ソリューションですか、私はデータ型を変更する必要がありますか?どんな助けでも本当に感謝します。

アップルのサンプルコードの参照リンク REF LINK

答えて

0

あなたはきれいに、あなたのコアデータのエンティティに非オプション、非過渡、文字列-messageDateSectionId属性を追加することによってこの問題を解決することができます。

この-sectionId属性をメインの-messageDate属性から派生させてください。 -messageDateを設定するたびに、-messageDateSectionIdを独自の形式に設定します。

したがって、この派生した-sectionId属性をメイン属性とともに保存します。

次に、-fetchControllerを作成するときに、-sectionNameKeyPathを-sectionId属性に設定します。 2013年1月1〜31日のすべてに同じ-sectionIdが設定されますので、表にグループ化されます。

-titleForHeaderInSectionでは、-fetchController.sections [SECTION_NUMBER] .name値を返すだけで、-sectionId文字列を表示できます。

関連する問題