2011-07-04 13 views
0

"セッション"と呼ばれるエンティティがあり、NSDate属性が含まれています。コアデータクエリ、NSPredicate

私が欲しいのは、コアデータモデルをクエリし、重複なしでNSDatesのDAYSの配列を取得できることです。

たとえば、土曜日に5回、金曜日に2回、日曜日に1回、「木曜日」、「金曜日」、「日曜日」の配列が必要です。

(それは必ずしも、その文字列の書式を持っている私は自分自身を把握し、修正することができ、その部分を持っていません。)

何この方法にアプローチする適切な方法でしょうか?

答えて

0

できません。これはNSPredicateが対象ではありません。 Sessionオブジェクトを取得し、それぞれのオブジェクトが何日いるのか把握する必要があります。我々はNSSetを使用していることから、曜日を順不同になることを

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); 

注:これは、このようなものになるでしょう。

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];