Ich habe 2 Kerndateneinheiten: Question und QuestionType. Jede Frage hat genau einen FractionType.Verwenden einer Kerndateneinheit als Enum?
QuestionType hat ein string-Attribut typeName; Das ist in erster Linie, wie ich den QuestionType identifizieren kann. Es ist auf eine Liste von ein paar verschiedenen Arten festgelegt. Ich frage mich, ob es möglich ist, die Liste aller QuestionTypes in den Daten als Enum zu verwenden, oder, wenn nicht, wie kann man diese Liste am besten verwenden, um einer Frage einen QuestionType zuzuweisen und den QuestionType später zu überprüfen?
Derzeit, wenn ich eine Art auf eine Frage zuweisen möchten (basierend auf der Typname zu wissen), Ich tue dies:
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];
Dieses wie viel Arbeit scheint zuweisen meine einen Fragetyp zu Frage! Und ich muss dies für andere ähnliche Entitäten wiederholen.
Und dann, wenn ich will später den Fragetyp überprüfen, ich tue:
if ([question.questionType.typeName isEqualToString:@"text"]){
Dies funktioniert gut, aber ich fühle mich wie ich die question.questionType auf die spezifische Fragetyp zu vergleichen soll ich suche im Gegensatz zum Vergleich des typeName.
Gibt es eine Möglichkeit eine ENUM einzurichten, um meine Fragetypen zu halten, so dass ich das tun kann:
question.questionType = Text;
switch(question.questionType)
{
case Text:
Danke! Aktualisiert, um die Enum-Syntax zu korrigieren. Es muss ein managedObject sein, sowohl weil die Liste möglicher questionTypes auf andere Weise als durch das erneute Kompilieren aktualisiert werden kann, als auch, weil es andere Eigenschaften neben typeName enthalten kann. Aber ich glaube, ein statisches Wörterbuch wird mir geben, was ich will. – GendoIkari
Habe gerade ein Problem damit festgestellt ... obwohl das großartig für das Setzen des FrageTyps ist, glaube ich nicht, dass es für den Vergleich funktionieren würde. question.questionType wäre nicht dasselbe Objekt wie mein fragmentType im Wörterbuch. weil es ein neues Objekt wäre, das von CoreData abgerufen wurde. Könnte ich eine Art von equals implementieren: Methode auf QuestionType, um true des typeName zurückzugeben, ist das gleiche? – GendoIkari
Ich glaube, es ist garantiert, dass ein Eintrag in der Datenbank durch ein 'NSManagedObject' in einem' MOC' repräsentiert wird, so dass Sie einfach den Zeiger vergleichen können. Wenn Sie mehr als einen 'FrageTyp' mit demselben' typeName' haben, zählen sie natürlich als mehr als ein Objekt. Aber du solltest nicht mehr als eins erstellen; Sie sollten immer garantieren, dass es einzigartig ist. – Yuji