2011-07-04 188 views
0

我有一個實體,稱爲「會話」,它包含一個NSDate屬性。核心數據查詢,NSPredicate

我想要的是能夠查詢核心數據模型,並得到NSDates天的數組,沒有任何重複。

舉例來說,如果我有在週日,週四5次,2日和1,我想「星期四」,「星期五」,「星期天」的數組。

(它不一定必須有一個字符串格式,這部分我可以找出並修改自己。)

什麼是接近這個方法的正確方法?

回答

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,一週的日子將是無序的。

0

我不認爲你可以得到你想要的查詢的結果是什麼。您可以使用-[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];