J'ai 2 entités de données principales: Question et QuestionType. Chaque question a exactement 1 QuestionType.L'utilisation d'une entité de données de base comme énumération?
QuestionType a un attribut de type typeName; ce qui est principalement comment j'identifie quel QuestionType c'est. Il est fixé à une liste de quelques types différents. Je me demande s'il est possible d'utiliser la liste de tous les QuestionTypes dans les données comme une énumération, ou sinon, quelle est la meilleure façon d'utiliser cette liste pour assigner un QuestionType à une Question, et vérifier le QuestionType plus tard?
Actuellement, quand je veux attribuer un type à une question (basée sur la connaissance du typeName), je fais ceci:
NSFetchRequest *questionTypeFetchRequest = [[NSFetchRequest alloc] init];
questionTypeFetchRequest.entity = [NSEntityDescription entityForName:@"QuestionType" inManagedObjectContext:self.managedObjectContext];
NSPredicate *questionTypePredicate = [NSPredicate predicateWithFormat:@"typeName like %@", [questionData objectForKey:@"questionType"]];
questionTypeFetchRequest.predicate = questionTypePredicate;
question.questionType = [[self.managedObjectContext executeFetchRequest:questionTypeFetchRequest error:&error] objectAtIndex:0];
Cela semble être beaucoup de travail juste pour attribuer un questiontype à mon Question! Et je dois répéter cela pour d'autres entités similaires.
Et puis quand je veux vérifier le questiontype plus tard, je suis en train de faire:
if ([question.questionType.typeName isEqualToString:@"text"]){
Cela fonctionne très bien, mais je me sens comme je comparerai le question.questionType à questiontype spécifique Je cherche , par opposition à simplement comparer le typeName.
Est-il possible de mettre en place un ENUM de tenir mes QuestionTypes, afin que je puisse le faire:
question.questionType = Text;
switch(question.questionType)
{
case Text:
Merci! Mise à jour pour corriger la syntaxe Enum. Il doit être un managedObject à la fois parce que la liste des questionTypes possibles devrait pouvoir être mise à jour par d'autres moyens que la recompilation, et parce qu'elle peut contenir d'autres propriétés en dehors de typeName. Mais je crois qu'un dictionnaire statique me donnera ce que je veux. – GendoIkari
Juste réalisé un problème avec cela ... bien que cela fonctionne très bien pour définir le questionType, je ne pense pas que cela fonctionnerait pour le comparer. question.questionType ne serait pas le même objet que mon questionType qui est dans le dictionnaire; parce que ce serait un nouvel objet récupéré à partir de CoreData. Pourrais-je implémenter une sorte d'equals: la méthode sur QuestionType pour renvoyer true de typeName est la même? – GendoIkari
Je crois qu'il est garanti qu'une entrée dans la base de données est représentée par un 'NSManagedObject' dans un' MOC', donc vous pouvez juste comparer le pointeur. Bien sûr, si vous avez plus d'un 'QuestionType' avec le même' typeName', ils comptent comme plus d'un objet. Mais vous ne devriez pas en créer plus d'un; vous devriez toujours garantir que c'est unique. – Yuji