我有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.
}
}
}
诸如此类。