2010-12-02 23 views
1

私は質問と質問タイプの2つのコアデータエンティティを持っています。すべての質問には、正確に1つのQuestionTypeがあります。コアデータエンティティを列挙型として使用していますか?

QuestionTypeには、typeName文字列属性があります。これは主にどの質問タイプであるかを特定する方法です。これは、いくつかの異なるタイプのリストに固定されています。列挙型としてデータ内のすべてのQuestionTypeのリストを使用できるかどうか、またはそうでない場合、このリストを使用してQuestionTypeを質問に割り当て、後でQuestionTypeをチェックする最良の方法は何か?私は(型名を知るに基づく)の質問にタイプを割り当てたいとき、私はこれをやっている現在

、:これは多くの作業のように思える

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]; 

がちょうどにQuestionTypeを割り当てるために、私の質問!そして私は他の同様のエンティティに対してこれを繰り返さなければなりません。

そして、私は後でQuestionTypeを確認したいときに、私がやっている:

if ([question.questionType.typeName isEqualToString:@"text"]){ 

これは正常に動作しますが、私は私が探しています特定のQuestionTypeにquestion.questionTypeを比較する必要があるように私は感じますこれは、typeNameを単に比較するのとは対照的です。

は、私はこれを行うことができるように、私のQuestionTypesを保持するために、列挙型を設定する方法はあります:

question.questionType = Text; 
switch(question.questionType) 
{ 
    case Text: 

答えて

1

questionTypeはオブジェクトでなければなりませんか?列挙型を使用する場合は、エンティティのquestionTypeプロパティを整数として、QuestionTypeのような別のエンティティではないことを宣言することができます。

または、questionTypeプロパティを文字列として宣言し、そこに直接typeNameを保持することができます。

enumを使用する場合でも、構文はC/Objective-CのEnumName.EnumKindと似ていません。構文については、教科書を参照してください。

あなたはエンティティとしてquestionTypeを使用し続ける場合は、私はのように、辞書にフェッチの結果をキャッシュするためにあなたを示唆している:そのような

(QuestionType*)questionTypeWithName:(NSString*)name 
    { 
     static NSMutableDictionary*dict=nil; 
     if(!dict){ 
      dict=[[NSMutableDictionary alloc] init]]; 
     } 
     QuestionType*qt=[dict objectForKey:name]; 
     if(qt){ 
       return qt; 
     }else{ 
      NSFetchRequest *questionTypeFetchRequest = [[NSFetchRequest alloc] init]; 
       ... 
      NSArray*result = ... executeFetchRequest: ... 
      if(result){ 
        ... 
        add the resulting qt to the dict ... 
        ... 
      }else{ 
        create a new QuestionType entity with a given name 
        add it to the dict. 
        return it. 
      } 
     } 
    } 

と何かを。

+0

ありがとうございます! Enum構文を修正するために更新されました。可能なquestionTypesのリストは、再コンパイル以外の手段で更新できる必要があり、typeName以外のプロパティも保持できるため、managedObjectである必要があります。しかし、私は静的な辞書が私に欲しいものを私に与えると信じています。 – GendoIkari

+0

これは問題を実現しました...これはquestionTypeを設定するためにはうまくいきますが、それを比較するためにはうまくいかないと思います。 question.questionTypeは、辞書にある質問タイプと同じオブジェクトではありません。 CoreDataからフェッチされた新しいオブジェクトになるためです。何らかの並べ替えを実装できますか?typeNameのメソッドをtrueに戻すメソッドは同じですか? – GendoIkari

+0

私はそれがデータベースの1つのエントリが 'MOC'の中に1つの' NSManagedObject'によって表されることを保証していると信じています。もちろん、同じ 'typeName'を持つ複数の' QuestionType'がある場合、それらは複数のオブジェクトとしてカウントされます。しかし、複数を作成すべきではありません。ユニークであることを常に保証する必要があります。 – Yuji

関連する問題