以多对多关系分配数据

时间:2014-04-17 02:36:50

标签: ios objective-c core-data nsset

我正在制作一个包含不同类型测验的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"];

1 个答案:

答案 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"];