2008-10-17 5 views
2

Dans mon modèle d'objet géré Core Data, j'ai une entité Foo avec une relation to-many (avec un inverse à to-many) à l'entité Baz nommée baz. Baz a une propriété de chaîne appelée "tag". Lorsque j'utilise [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription] pour créer les éditeurs de lignes pour un NSPredicateEditor, le résultat contient (comme prévu) un modèle de ligne commeModèles de lignes de prédicat générés automatiquement pour la clé to-many?

[Popup: baz.tag] [Popup: Contient | is | is not | | TextField]

Lorsque je sélectionne "Contient" dans le menu contextuel, une requête avec le prédicat fonctionne comme prévu. Si je choisis l'un des autres popups (par exemple "is"), j'obtiens l'erreur suivante: "to-many key not allowed here". Puis-je utiliser [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:] ou dois-je créer l'éditeur de ligne manuellement?

Répondre

3

Il semble que le modèle généré automatiquement (en utilisant [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]) ne puisse pas produire les opérateurs corrects. La solution consiste à créer le modèle manuellement en utilisant [NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]. Pour l'exemple donné:

id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0]; 
Questions connexes