我正在制作一个包含不同类型测验的iOS应用,所有问题和答案选项都存储在CoreData
中。
我创建了两个实体,一个名为 QuestionData ,具有'问题''answer1'(意思是,答案选择1),'answer2'等属性,然后是另一个名为的实体测验,使用'name'和'quizId'之类的属性,我在Quiz上创建了一个名为'dataData'的多对多关系,它将引用所有问题/答案等。
当我创建一些测试数据(试验关系)时,我首先创建了questionData,然后设置了测验的名称和ID,然后我尝试在这样的关系中设置数据,
[quizInfo setValue:questionData forKey:@"quizData"];
应该在测验实体的quizData
键中存储/设置所有问题/答案。但是,我收到了这个不可接受的类型错误,告诉我它“需要”一个NSSet
,但我改为给它一种QuestionData
。
'NSInvalidArgumentException', reason: 'Unacceptable type of value for to-many relationship: property = "quizData"; desired type = NSSet; given type = QuestionData; value = <QuestionData: 0x89447a0> (entity: QuestionData; id: 0x8919900 <x-coredata:///QuestionData/t6B583F60-5794-47FA-8A51-
我理解'set'的概念但是,我不确定如何在执行此操作时将questionData
设置为
[quizInfo setValue:questionData forKey:@"quizData"];
完整代码:
NSManagedObjectContext *context = [self managedObjectContext];
QuestionData *questionData = [NSEntityDescription
insertNewObjectForEntityForName:@"Questiondata"
inManagedObjectContext:context];
[questionData setValue:@"do you like big basketballs" forKey:@"question"];
[questionData setValue:@"yes" forKey:@"answer1"];
[questionData setValue:@"no" forKey:@"answer2"];
[questionData setValue:@"maybe" forKey:@"answer3"];
[questionData setValue:@"maybe" forKey:@"correctAnswer"];
Quiz *quizInfo = [NSEntityDescription
insertNewObjectForEntityForName:@"Quiz"
inManagedObjectContext:context];
[quizInfo setValue:@"1" forKey:@"quizId"];
[quizInfo setValue:@"sportsquiz" forKey:@"name"];
[quizInfo setValue:questionData forKey:@"quizData"];
答案 0 :(得分:2)
您需要将questionData
包装在一个集合中。由于您此时只有一个问题,因此可以使用
[quizInfo setValue:[NSSet setWithObject:questionData] forKey:@"quizData"];
如果您有多个问题,可以使用:
[quizInfo setValue:[NSSet setWithObjects:question1Data,question2Data,question3Data,nil] forKey:@"quizData"];
或者您可以将您的问题放入NSMutableArray并使用
[quizInfo setValue:[NSSet setWithArray:questionArray] forKey:@"quizData"];