1

我有一个问题,我想知道是否有可能解决。我有一个使用 Core Data 和 NSFetchedResultsController 的 UITableView。我的应用程序的很大一部分是根据日期组织事物。理想情况下,我想将 TableView 分成基于 3 个日期范围的部分。这些范围将介于现在和 2 天之间、2 天和 6 天之间以及 10 天及以后。用户有一个 UIDatePicker,当他们输入一个日期时,它会自动放入这些有组织的部分之一。现在我知道如何轻松地将表格视图按每个日期划分为多个部分,但不知道如何做到这一点,因此每个部分都有一个时间范围。感谢任何可能提供帮助的人。

4

2 回答 2

1

这是我自己做的。最终结果是将核心数据对象分类为部分,每个部分为 1 天宽。多个对象可能在一个部分中。

//at a point where you define your fetched results controller
//add @"sectionTitle" as sectionNameKeyPath:

//...
 NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"sectionTitle" cacheName:@"CacheName"];
//....


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {


    NSString* dateString =  [[[self.sleepQualityController sections] objectAtIndex:section] name];

    return dateString;



}



//add this to your managed object's header file:
@property(nonatomic,assign)NSString* sectionTitle;

//this goes into your managed object's implementation file

-(NSDate *)dateWithOutTime:(NSDate *)datDate
{
    if( datDate == nil ) {
        datDate = [NSDate date];
    }
    NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate];
    return [[NSCalendar currentCalendar] dateFromComponents:comps];

}

-(NSString*)sectionTitle
{

        NSDateFormatter* dateFormaterWeekdayMonthDay = [[NSDateFormatter alloc] init];
        dateFormaterWeekdayMonthDay.dateStyle = NSDateFormatterLongStyle;

    return [NSString stringWithFormat:@"%@", [dateFormaterWeekdayMonthDay stringFromDate:[self  dateWithOutTime:self.date]] ];
}
于 2012-11-18T02:55:56.290 回答
0

我将探索在获取请求中使用 NSExpressions。在获取请求中使用类似 SQL 的表达式可能很难找到好的文档;但是您也可以编写自己的块供查询使用,这非常棒。

基本上你想要的是一个 NSExpression,它返回一个字符串作为部分名称,你可以告诉 NSFetchedResultsController 用于部分名称键路径。您需要围绕表达式构建一个 NSExpressionDescription 以将其添加到获取请求中。

我希望这能让你朝着正确的方向前进!

FWIW,我通常倾向于做一个类似 SQL 的解决方案(基本上选择一个比较日期字段并选择三个值之一的“案例”表达式),但有时使用核心数据,只需拔出大锤就更容易了(或者更确切地说,感觉就像他们希望我们做的那样)。

于 2012-06-15T15:46:28.217 回答