我有一个名为“Sessions”的实体,它包含一个NSDate属性。
我想要的是能够查询核心数据模型并获得NSDates的DAYS数组,而不需要任何重复。
例如,如果我星期四有5个会话,星期五有2个星期日,星期日有1个会话,我想要一个“星期四”,“星期五”,“星期天”的数组。
(它不一定要有那种字符串格式,这部分我可以弄清楚并修改自己。)
采用这种方法的正确方法是什么?
答案 0 :(得分:0)
你做不到。这不是NSPredicate
的用途。您必须获取Session
个对象,并为每个对象找出它所在的日期。它会是这样的:
NSArray *sessions = ...; // an array of Session objects
NSMutableSet *days = [NSMutableSet set];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"EEEE"]; // this is the name of the day of the week, spelled out
for (Session *session in sessions) {
NSDate *d = [session date];
NSString *dayOfWeek = [f stringFromDate:d];
[days addObject:dayOfWeek];
}
[f release];
NSLog(@"days: %@", days);
请注意,由于我们使用的是NSSet
,因此一周的日期将无序。
答案 1 :(得分:0)
我认为你不能得到你想要的查询结果。您可以使用-[NSFetchRequest setReturnsDistinctObject:]
仅返回具有唯一NSDate值的结果,但由于您只关心一周中的某一天,因此可能会运气不佳。
但是,您可以将实体中的星期几存储为整数,然后搜索它。
您还可以获取所有Sessions实体,然后从那里构建一周中的日期字典(其中results数组是包含所有已获取会话的数组):
// This date formatter will return a string with the full weekday, i.e. "Monday"
NSDateFormatter *dfText = [[NSDateFormatter alloc] init];
[df setDateFormat:@"EEEE"];
// This date formatter will return a string with the number of the weekday, i.e. "1"
NSDateFormatter *dfNumber = [[NSDateFormatter alloc] init];
[df setDateFormat:@"c"];
NSMutableDictionary *weekdays = [NSMutableDictionary dictionary];
for (Session *curSession in resultsArray) {
NSString *weekdayNumber = [dfNumber stringFromDate:curSession.Date];
if (![weekdays objectForKey:weekdayNumber]) {
[weekdays setObject:[dfText stringFromDate:curSession.Date] forKey:weekdayNumber];
}
}
[dfText release];
[dfNumber release];