Ios 将CoreData保存到Swift中的多个关系
我有一对多的关系看起来是这样的 我已在文件中设置模型类以匹配:Ios 将CoreData保存到Swift中的多个关系,ios,macos,core-data,swift,relationship,Ios,Macos,Core Data,Swift,Relationship,我有一对多的关系看起来是这样的 我已在文件中设置模型类以匹配: import CoreData import Foundation class Board: NSManagedObject { @NSManaged var boardColor: String @NSManaged var boardCustomBackground: AnyObject? @NSManaged var boardID: String @NSManaged var boardN
import CoreData
import Foundation
class Board: NSManagedObject {
@NSManaged var boardColor: String
@NSManaged var boardCustomBackground: AnyObject?
@NSManaged var boardID: String
@NSManaged var boardName: String
@NSManaged var lists: NSSet
}
class List: NSManagedObject {
@NSManaged var listID: String
@NSManaged var listName: String
@NSManaged var board: Board
}
因为我要从多个JSON端点获取数据,所以我必须将列表与主板分开保存我要做的是为具有匹配boardID的板创建/更新列表
经过多次尝试,我现在的处境如下:
func saveList(boardID: String, listName: String, listID: String) {
let request = NSFetchRequest(entityName: "Board")
var error: NSError? = nil
request.predicate = NSPredicate(format: "boardID like %@", boardID)
let results: NSArray = context.executeFetchRequest(request, error: &error)
if results.count > 0 {
for result in results {
let board = result as Board
let list = NSEntityDescription.insertNewObjectForEntityForName("List", inManagedObjectContext: context) as List
println("You should invoke addListObject(...)
on board
object:
board.addListObject(list) // notice that we pass just one object
func存储列表(boardID:String,listName:String,listID:String){
let request=NSFetchRequest(entityName:“Board”)
变量错误:n错误?=nil
request.predicate=NSPredicate(格式:“boardID like%@”,boardID)
let results:NSArray=context.executeFetchRequest(请求,错误:&error)
如果results.count>0{
为了得到结果{
让board=结果为board
让list=NSEntityDescription.insertNewObjectForEntityForName(“list”,inManagedObjectContext:context)作为列表
println(“您应该在线路板上调用addListObject(…)
对象:
func addList(values: NSSet) {
var items = self.mutableSetValueForKey("lists");
for value in values {
items.addObject(value)
}
}
func removeList(values: NSSet) {
var items = self.mutableSetValueForKey("lists");
for value in values {
items.removeObject(value)
}
}
此外,如果您希望能够将一组列表添加到特定的board
对象,可以使用接受对象集的方法增强board
类扩展:
list.board = board
在一对多关系中,更容易设置对象的“到一”方向
相反的关系,在你的情况下只是
@NSManaged var lists: Set<List>
因此,这里实际上不需要扩展方法。如果您定义:
board.lists.insert(list)
在我如何建立我的列表-董事会关系的情况下,它看起来已经是一个了?请看:@Pirijan:是的,我已经在你问题的图片中看到了。Bord->List是“对多”,List->Board是“对一”"。由于这些是彼此的反向关系,设置一个会自动更新另一个。-在这种情况下,设置列表->电路板关系更容易一些。当我尝试List.Board=Board
时,程序失败,保存上下文时出现错误:无法合并更改。
。冲突错误列表显示两个具有相同属性的电路板boardID,即使我在构建之前删除了db文件?@MartinR你能检查一下我的答案吗?我刚刚发现你可以这样做,它对我很有效,我认为这是一个很好的选择。@MartinR,你能告诉我,保存后你将如何获取结果吗?我的意思是一对多关系中的获取将与norm不同所有场景??嗯,似乎在var items=self.mutableSetValueForKey(“列表”)中引发了未捕获的异常
。出现以下错误:NSManagedObjects of entity'Board'不支持-mutableSetValueForKey:对于属性'lists'
。现在正在尝试解决这个问题。@Pirijan你有没有弄清楚为什么会出现'do not support-mutableSetValueForKey'错误?我看到了同样的情况,无法回避。我也开始了我的项目出现g“不支持-mutableSetValueForKey”错误。我是新手,所以花了一段时间才找到原因。在关系字段的“模型检查器”对话框中,有一个名为“类型”的字段。默认情况下,它读作“到一”。我选择了“到多”选项存在,错误消失。@Keenle,保存后,您能告诉我如何获取结果吗?我的意思是一对多关系中的获取与正常情况不同??保存后,您能告诉我如何获取结果吗?我的意思是一对多关系中的获取与正常情况不同??Can任何人请告诉我,我们将如何从特定boardId的列表中获取记录??保存后,您能否告诉我如何获取结果?我的意思是一对多关系中的获取将不同于正常情况??