我正在制作一个包含不同类型测验的 iOS 应用程序,所有问题和答案都存储在 CoreData
中。
我创建了两个实体,一个名为 QuestionData,它具有诸如“问题”、“answer1”(意思是答案选择 1)、“answer2”等属性,然后是另一个名为 的实体Quiz,具有“name”和“quizId”等属性,我在 Quiz 上创建了一个名为“dataData”的对多关系,它将引用所有问题/答案等。
当我创建一些测试数据(来试验关系)时,我首先创建了问题数据,然后为测验设置名称和 ID,然后我尝试像这样在关系中设置数据,
[quizInfo setValue:questionData forKey:@"quizData"];
应该在 Quiz 实体的 quizData
键中存储/设置所有问题/答案。然而,我遇到了这个 Not Acceptable 类型错误,告诉我它“需要”一个 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-
我理解“集合”的概念,但是,我不确定在执行此操作时如何将 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"];
最佳答案
您需要将您的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"];
关于ios - 在一对多关系中分配数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123609/