ios - 在一对多关系中分配数据

标签 ios objective-c core-data nsset

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

相关文章:

ios - 在应用程序中备份和还原选件

ios - 将 NSURLSessionDataTask 转换为具有后台支持的下载任务

ios - Objective-C中random()函数源码

ios - 如何通过点击 UITableViewCell IOS7 来播放视频

ios - 阻塞 for 循环,直到委托(delegate)方法被触发

ios - 基于数组对 NSFetchedResultsController 结果进行排序?

ios - 允许子NSManagedObjectContext在其父上下文保存时获取的设置

ios - CoreBluetooth - didDiscoverPeripheral 从未调用过特定的 serviceUUID,但适用于 nil

iphone - 将 UINavigationBar 背景图像更改为默认 - iOS 4.3

objective-c - C 风格的 block 会导致内存泄漏吗?