我正在存储来自textfield的字符串输入及其创建的dateandtime。我将日期值存储在coredata中,其中键messageDate
是一个字符串数据类型。我将我的日期值转换为字符串并将其存储在coredata中。我能够看到存储日期和文本值的数组,如下所示
timeAndDateMsgArr (
"2016-11-02 17:59 PM",
"2016-11-02 18:08 PM",
"2016-11-02 18:08 PM"
)
textArr (
"Hai",
"The",
"I'm"
)
我可以通过在CustomCell中添加两个标签,在UITableView
中查看存储的文本及其创建日期。但我需要按日期对文本进行分组。我已经尝试了很多解决方案,下面是其中之一
- (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;
}
但我需要按日期分组显示消息。我已经尝试了适合我的要求的苹果示例代码,其中日期键存储在日期数据类型中,但在我的情况下,我将日期存储在字符串数据类型中。在我的情况下,我无法更改数据类型,因为它会影响代码。是他们的替代解决方案还是我需要更改数据类型?任何帮助将非常感激。
Apple示例代码参考链接 REF LINK
答案 0 :(得分:0)
您可以通过向Core Data实体添加非可选的非瞬态String -messageDateSectionId属性来彻底解决此问题。
将此-sectionId属性派生自main -messageDate属性;无论何时设置-messageDate,还要将-messageDateSectionId设置为自定义格式。
因此,您将保存此衍生的-sectionId属性以及您的主要属性。
接下来,在创建-fetchController时,将-sectionNameKeyPath设置为-sectionId属性。 2013年1月1日至31日的所有内容都具有相同的-sectionId,因此将在表格中组合在一起。
对于-titleForHeaderInSection,您只需返回-fetchController.sections [SECTION_NUMBER] .name值即可显示您的-sectionId字符串。