2009-10-05 5 views
8

J'ai deux types d'objections: les emplacements et les éléments d'historique. J'essaie de récupérer des emplacements attachés à un élément de l'historique, mon prédicat d'extraction pour l'emplacement est donc "history. @ Count> 0", ce qui fonctionne correctement. Je voudrais également trier les objets d'emplacement avec un NSSortDescriptor par la date de leur dernier élément d'historique, ce qui, pour autant que je puisse le faire, serait "history. @ Max.time", mais cela renvoie erreur:NSSortDescriptor et to-many relations

 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
    reason: 'Keypath containing KVC aggregate where there shouldn't be one; 
    failed to handle [email protected]' 

Halp plox?

+0

'location.history' est-il un tableau/ensemble? (Il semble en être un, mais vous avez une forme singulière.) –

+0

c'est une relation à-plusieurs qui impliquerait que c'est. la forme singulière est ma mauvaise, mais je ne veux pas jouer avec pour le moment pour éviter de casser quoi que ce soit. –

+2

Joonas, avez-vous compris? Je suis dans la même situation EXACT, et obtenir la même erreur. Merci – kdbdallas

Répondre

0

Voici un code que j'ai où je fais la même

NSError *error; 

if (![[self fetchedResultsController] performFetch:&error]) 
{ 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease]; 
    [alert show]; 
} 
else 
{ 
    self.feedsArray = [fetchedResultsController fetchedObjects]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"[email protected]" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    self.feedsArray = [feedsArray sortedArrayUsingDescriptors:sortDescriptors]; 

    [sortDescriptors release]; 
    [sortDescriptor release]; 

    NSInteger overviewAmount = [[feedsArray valueForKeyPath:@"@sum.unreadArticles"] integerValue]; 

    .... 
} 
+0

Une idée de ce qui aurait pu le résoudre si? Je ne peux pas vraiment voir quoi que ce soit dans ce code qui aurait pu être le correctif ... –

+0

Je ne suis pas sûr exactement ... Avez-vous votre entité sous-localisée? Les deux sont (donc dans l'exemple ci-dessus l'entité sur laquelle je fais le fetch et l'entité articles sont sous-classés) Je n'ai rien de spécial dans la sous-classe pour les articles, donc je ne me souviens pas pourquoi je l'ai sousclassé C'est pourquoi ... Une autre pensée est dans mes articles Entity l'attribut postDate que je fais le @max sur j'ai paramétré dans le modal à indexer. Peut-être essayer ça. Assurez-vous également que la valeur de votre date a une valeur par défaut.J'utilise: 1980-01-01 00:00:01 – kdbdallas

4

AFAIK, vous ne devez utiliser collection operators, décrit dans le Key-Value Coding Programming Guide, pour les chemins clés de vos descripteurs de tri avec collections (NSArray, NSSet, NSDictionary).

Vous ne devez pas utiliser d'opérateurs de collecte pour les chemins de clé de vos descripteurs de tri avec des demandes de récupération (NSFetchRequest). @kdbdallas utilise correctement un opérateur de collecte pour trier NSArray. Il ne l'utilise pas pour spécifier le descripteur de tri d'une requête d'extraction.

Il serait cependant adorable si les opérateurs de collecte travaillaient pour spécifier les chemins clés pour trier les requêtes d'extraction. Veuillez soumettre cette demande de fonctionnalité au http://bugreport.apple.com/. Plus il est signalé, plus ils sont susceptibles de le supporter.

+0

J'ai déposé ce numéro avec Apple: ID: 9758650, Titre: Collection opérateurs devraient travailler avec des données de base, Produit: SDK iPhone, Classification: Amélioration, Date d'arrivée: 12-Juillet -2011 12h26, État: Ouvert – ma11hew28

+0

J'ai soumis rdar: // 10468062 avec le même titre et un exemple avec les ministères et les employés. Plus il y a de personnes qui le suggèrent, mieux c'est! – theory

+0

Impossible de trouver le rapport de bug 10468062 sur le radar ouvert. Cela m'aiderait vraiment pour que je puisse plus facilement le duper. – samvermette

Questions connexes