6
votes

Besoin d'aide avec de nombreuses relations dans les données de base pour iPhone

Je suis venu dans un barrage routier de mon projet actuel. J'ai essentiellement une application qui ressemble beaucoup à l'application de recette de données de base ... Voici la structure de base que j'ai dans mon .xcdatamodel

Entité: Restaurant Chaîne: nom Catégorie: Catégorie <---- à-de nombreuses relations

Entité: Catégorie Chaîne: nom Restaurant: Restaurant <---- à-de nombreuses relations Donc, fondamentalement, un restaurant peut avoir plusieurs catégories ... Et il y a un nombre const de catégories prédéfinies. Par exemple: Restaurant: Nom: Chili's Catégories: Sortez, salle à manger familiale

"Sortez" et "Dîner familial" sont 2 de 10 catégories de restaurants différentes différentes. Comment puis-je faire cela. J'ai examiné la base de données SQLLITE et j'ai mon zrestaurant et ma table Zcategory + la table de jointure pour les deux ... J'ai des données dans les deux ...

Comment puis-je me lancer dans mes restaurants Catagory avec les différentes valeurs? Et puis comment puis-je les récupérer?

merci tout! Kurt


0 commentaires

4 Réponses :


0
votes

Comment puis-je me lancer dans mes restaurants Catagory avec les différentes valeurs? Et puis comment puis-je les récupérer?

La meilleure chose à faire est de passer à travers le Didacticiel de données de base pour iPhone , qui passe comment ajouter de nouvelles instances d'objet gérées d'un type d'entité (dans votre cas," Restaurant "), définissez les attributs de cette instance (par exemple," Restaurant.Category ") et récupérer des résultats.

Le tutoriel utilise un type d'entité appelé "événement" qui a des attributs de date et d'emplacement, mais les idées sont toutes identiques.


0 commentaires

4
votes

Vous voudriez faire quelque chose comme ceci, à la place:

Restaurant *mcDonalds = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext];
mcDonalds.name = @"McDonalds";

Restaurant *inNOut = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext];
inNOut.name = @"In-N-Out";

Category *driveThru = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
driveThru.name = @"Drive Thru to Go";

Category *sitDown = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
sitDown.name = @"Sit Down and Eat";

// make NSSet* of Category objects
NSSet *fastFood = [NSSet setWithObjects:driveThru, sitDown, nil];

// set Restaurant instances' categories ("to-many") property
mcDonalds.categories = fastFood;
inNOut.categories = fastFood;

// save changes to managedObjectContext...
NSError *error = nil;
if ([managedObjectContext save:&error]) {
   // handle save error
}


0 commentaires

4
votes

Si vous souhaitez appeler une méthode comme "-AjouterddcatagoryObject:" sur votre sous-classe NSManèdeObject, vous devez avoir le code de cette méthode dans votre fichier .m. Il n'est pas généré au moment de l'exécution.

Cependant, Peut être généré pour vous semi-automatiquement par xcode - recherchez les différents éléments de menu qui vous permettent de copier les définitions de la méthode et les implémentations de Xcode.

La plupart des gens sautent de nos jours, vous n'avez pas besoin d'appeler - addCategoryObject :, Vous pouvez simplement laisser l'exécution générer du code d'accesseur pour vous.

premier off, votre nom de variable (dans l'en-tête et dans votre modèle) devrait être "Catégories", pas "Catégorie", car il est Représentant un ensemble, pas un singleton.

Vous pouvez ensuite définir des catégories sur n'importe quel jeu de votre choix, en utilisant quelque chose comme: xxx


1 commentaires

Merci pour la réponse .. Je pense que mon problème pourrait être quelque chose d'ailleurs dans mon code .. Parce que cela ne fonctionne toujours pas, je regarde mon DB Sqllite et je ne peux pas obtenir de données pour montrer ou être associé à mon Restaurant dans la table de jointure. Je posterai une fois que je comprendrai ça. Merci beaucoup!



5
votes

OK, après avoir travaillé sur cela au cours des 2 derniers jours, je suis finalement proposé ma solution qui était en fait un mélange entre Alex et Wills Suggestions ... Merci à vous deux!

Voici ce que j'ai ... xxx

puis j'ai économisé comme ceci xxx

et cela le fait!

Merci beaucoup pour vous aider deux !!!

-kurt


0 commentaires