2011-03-19 2 views

Répondre

1

Une méthode possible:

Étape 1) Voir « Création d'une date à partir de composants » de « Date et heure de programmation d'Apple Guider." Faire un NSDate représentant le début de l'année, et un NSDate représentant la fin de l'année. Étape 2) Ensuite, vous pouvez créer un prédicat qui recherche les objets dont l'attribut date est supérieur à la première date et inférieur à la dernière date.

Le prédicat ressemblerait à quelque chose comme ceci:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@“(inceptionDate > %@) AND (inceptionDate < %@)”, dateBeginYear, dateEndYear]; 
+0

En effet, je viens d'essayer quelque chose comme ça et il fonctionne, mais l'idée de Rog semble plus propre – kindoblue

+1

Comme toujours, il est toujours une solution propre, belle, élégante à chaque problème, mais il est faux :-) L'idée suggérée par Rog n'était pas possible de suivre: un prédicat basé sur des propriétés transitoires ne peut pas être – kindoblue

+0

@kindoblue: Merci d'avoir posté le complet, acrobatique répondre. Je l'ai caché pour référence. Et je me demande si vous ne pouvez pas encore faire quelque chose avec un attr transitoire, le définissant pendant tout le travail que vous faites avec le fetch, après quoi les données transitoires rendraient facile la manipulation des informations de date des objets mis en cache. – Wienke

5

Finalement, je ne plus ou moins comme suggéré par Wienke. Pour créer le prédicat qui va chercher les dossiers pour une année (s), je l'ai fait comme ceci:

- (NSPredicate*) predicateFromYear:(NSInteger)start span:(NSInteger)aSpan { 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *dc = [NSDateComponents new]; 

[dc setYear:start]; 

NSDate *startDate,*endDate; 

startDate = [cal dateFromComponents:dc]; 
[dc setYear:aSpan]; 
endDate = [cal 
      dateByAddingComponents:dc 
      toDate:startDate 
      options:0]; 

[dc release]; 
return [NSPredicate predicateWithFormat: 
     @"date >= CAST(%f, \"NSDate\") AND date < CAST(%f, \"NSDate\")", 
     [startDate timeIntervalSinceReferenceDate], 
     [endDate timeIntervalSinceReferenceDate]]; } 
+0

La distribution à NSDate a fait l'affaire pour moi, merci! –

Questions connexes