6
votes

Données de base: prédicat pour - de nombreuses relations

J'ai un modèle Coredata avec 4 entités.

Capture d'écran modèle -> http://img96.imageshack.us/img96/7857/ Screenshot20100209AT182.png

état

-statename

Lieu:

-LocessionName (attribut)

-LocalisationDescription

-LocalisationActivités (relatine)

-state (relation)

EmplacementActivités:

-Location (relation)

-Activity (relation)

activités

-ActivityName (attribut)

-LocationsActivités (relation)

Comment puis-je écrire une requête qui sélectionne tous les emplacements ayant

(activité = 'golf' ou activité = 'Natation') et état = 'la'


0 commentaires

3 Réponses :


5
votes
// With some NSManagedObjectContext *moc
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Location"
                               inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:
                       @"(locationActivities.activity.activityName == %@ OR 
                          locationActivities.activity.activityName == %@) AND 
                         state.stateName == %@",
                       @"Golf", @"Swimming", @"LA"]];
NSError *error;
NSArray *results = [moc executeFetchRequest:request error:&error];Basically, do a Core Data fetch as normal, then build the appropriate predicate to filter the results (as described in the Predicate Programming Guide).

4 commentaires

Qu'en est-il de la table desactivités de liaison?


Correction, mais pourquoi cette entité est-elle dans la première place? Vous pouvez (je crois) simplement avoir une relation unique à une autre de l'emplacement à l'activité.


cela ne fonctionne pas. Je reçois l'erreur: "TO-nombreuses touches non autorisées ici". J'ai ajouté une autre entité comme suggérée par Stackoverflow.com/Questtions/1903177/...


Quel prédicat avez-vous utilisé cela vous a donné cette erreur? Avec une relation directe à de nombreuses relations de l'emplacement à l'activité (même si l'inverse est également à plusieurs), je pense que vous devriez être capable de faire "toutes les activités.ActivityName ==% @" dans le cadre de votre prédicat.



-1
votes

En terminer, vous devez arrêter de penser en termes de tables et de requêtes pour les données de base. Dans les données de base, ces spécificités du magasin persistant SQLLITE et vous ne les voyez jamais ou ne traitez pas avec eux.

Les entités ne sont pas des tables et des relations ne relient pas aux tables. Essayer de cramner le modèle d'objet dans une SQL dans votre tête vous mènera au chagrin car les données de base ne fonctionnent pas comme SQL.


0 commentaires

1
votes

Je viens de remarquer que dans votre écran de l'écran, votre entité Emplacement est en fait orthographié emplacement de localisation (notez le "C" manquant).

C'est suffisant pour détruire votre graphique. Tout prédicat qui recherche emplacementactivités échouera.

Les erreurs comme ceci font de moi la programmation de haine. Je semble passer plus de temps à suivre les fautes de frappe que je fixe des erreurs de conception.


0 commentaires