我有2个核心数据实体:Question和QuestionType。每个问题都有1个QuestionType。

QuestionType具有typeName字符串属性;这主要是我确定它是哪个QuestionType的方式。它被固定为几种不同类型的列表。我想知道是否有可能将数据中所有QuestionTypes的列表用作枚举,否则,使用此列表将QuestionType分配给Question并在以后检查QuestionType的最佳方法是什么?

当前,当我想为问题分配类型时(基于对typeName的了解),我正在这样做:

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"]){


这可以正常工作,但是我觉得我应该将question.questionType与我要查找的特定QuestionType进行比较,而不是仅仅比较typeName。

有什么方法可以设置一个枚举来保存我的QuestionTypes,以便我可以这样做:

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

最佳答案

questionType是否必须是对象?如果要使用枚举,则可以仅声明questionType实体的Question属性为整数,而不是诸如QuestionType之类的另一个实体。

或者,您可以将questionType属性声明为字符串,然后直接将typeName保留在那里。

即使使用枚举,语法也不像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.
            }
        }
   }


诸如此类。

10-08 01:27