我有一個實體,稱爲「會話」,它包含一個NSDate屬性。核心數據查詢,NSPredicate
我想要的是能夠查詢核心數據模型,並得到NSDates天的數組,沒有任何重複。
舉例來說,如果我有在週日,週四5次,2日和1,我想「星期四」,「星期五」,「星期天」的數組。
(它不一定必須有一個字符串格式,這部分我可以找出並修改自己。)
什麼是接近這個方法的正確方法?
我有一個實體,稱爲「會話」,它包含一個NSDate屬性。核心數據查詢,NSPredicate
我想要的是能夠查詢核心數據模型,並得到NSDates天的數組,沒有任何重複。
舉例來說,如果我有在週日,週四5次,2日和1,我想「星期四」,「星期五」,「星期天」的數組。
(它不一定必須有一個字符串格式,這部分我可以找出並修改自己。)
什麼是接近這個方法的正確方法?
你不能。這不是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
,一週的日子將是無序的。
我不認爲你可以得到你想要的查詢的結果是什麼。您可以使用-[NSFetchRequest setReturnsDistinctObject:]
僅返回具有唯一NSDate值的結果,但由於您只關心一週中的某一天,因此可能會失敗。
但是,你可以在一週中的一天存儲在實體作爲一個整數,然後搜索。
你也可以獲取所有會話的實體,然後生成的一週從那裏的天字典(其中結果數組包含所有獲取會話的數組):
// 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];