Ios swift coredata-发送到实例的选择器无法识别

Ios swift coredata-发送到实例的选择器无法识别,ios,swift,core-data,Ios,Swift,Core Data,为coredata设置NSManagedObject的属性(NSSet)时,它将在运行时显示此错误: -[__NSArray0 isEqualToSet:]: unrecognized selector sent to instance 0x1551ad60 首先,我不知道哪个实例被标识为0x1551ad60 第二,我知道实例不理解“isEqualToSet”,但是我没有在代码中的任何地方调用它,这一定意味着它是由框架在某处调用的?我猜我的代码是不正确的,但我不知道如何或在哪里 我正在用Swi

为coredata设置NSManagedObject的属性(NSSet)时,它将在运行时显示此错误:

-[__NSArray0 isEqualToSet:]: unrecognized selector sent to instance 0x1551ad60
首先,我不知道哪个实例被标识为0x1551ad60

第二,我知道实例不理解“isEqualToSet”,但是我没有在代码中的任何地方调用它,这一定意味着它是由框架在某处调用的?我猜我的代码是不正确的,但我不知道如何或在哪里

我正在用Swift运行Xcode 7.3(我想是2.0吧?),我已经在iPad上多次删除/重新安装了该应用程序

这是我的代码,问题行已标记。请帮帮我,这快把我逼疯了

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext:NSManagedObjectContext = appDelegate.managedObjectContext

    let carEntity = NSEntityDescription.entityForName("Car", inManagedObjectContext:managedContext)
    let carObj = NSManagedObject(entity: carEntity!, insertIntoManagedObjectContext: managedContext)
    carObj.setValue("Toyota", forKey: "name")
    carObj.setValue("Blue", forKey: "colour")

    let wheelEntity = NSEntityDescription.entityForName("Wheel", inManagedObjectContext:managedContext)
    let wheelObj = NSManagedObject(entity: wheelEntity!, insertIntoManagedObjectContext: managedContext)
    wheelObj.setValue(Float(1.3), forKey: "tread")

(Original code)
var wheelObjArray = [NSManagedObject]()
wheelObjArray.append(wheelObj)
let wheelSet = NSSet(array: wheelObjArray)
carObj.setValue(wheelSet, forKey: "wheels")
^^ error here: unrecognized selector sent to instance
(/Original code)

(Edited code)
var wheelObjArray = carObj.mutableSetValueForKey("wheels")
wheelObjArray.addObject(wheelObj)
^^ error here: *** -[NSSet intersectsSet:]: set argument is not an NSSet
(/Edited code)

do {
    try managedContext.save()
    print("Success!")
} catch let error as NSError  {
    print("Failed to save: \(error), \(error.userInfo)")
}
我的CoreData模型如下所示:

编辑:汽车关系“轮子”现在是一对多关系

编辑#2:代码已更新

编辑#3:此问题的一个可能解决方法是删除车轮“car”的反向关系

应该是

var wheel_obj_array = car_obj.mutableSetValueForKey("wheels")
wheel_obj_array.addObject(wheel_obj)
也不应该真的使用VAR,因为它很难读取任何内容。

car\u obj.setValue(NSSet(object:wheel\u obj),forKey:“wheels”)
应该可以工作

wheel\u obj.setValue(car\u obj,forKey:“relationship”)
将自动设置反向关系,这可能更易于写入和读取


顺便说一句,您可能希望将
车轮中的关系更改为
汽车
,而不是当前混乱的
关系

,在我的情况下,它通过删除NSSet工作。发生错误时,我使用的代码是:

project.setValue(NSSet(object: agent), forKey: "agent")
然后,为了使其工作,我将其更改为:

project.setValue(object: agent, forKey: "agent")

谢谢你

看来你的关系两边都是一对一,你可能想把
轮子
改成
多个
谢谢你的建议,我以后会遇到这个问题。谢谢你的两个建议,我已经更新了它,但是它产生了以下错误:**-[NSSet INTERSESSET:]:set参数不是NSSet-在这一行:wheelObjArray.addObject(wheelObj)是两个方向上的一对一关系?我已将汽车“wheels”更新为一对多,并卸载/重新安装了应用程序,但新错误仍在显示。是否已删除let wheel\u set:NSSet=NSSet(数组:wheel\u obj\u数组)car_obj.setValue(wheel_set,forKey:“wheels”)你能在上面的另一个代码块中添加当前代码作为编辑吗?请:Dcar_obj.setValue(NSSet(object:wheel_obj),forKey(“wheels”))不起作用,所以我尝试了car_obj.setValue(NSSet(object:wheel_obj),forKey:“wheels”),错误没有改变:(使用我提到的第二个选项更好/更容易。错误似乎是“to many”未正确设置。您可以通过在选择.xcdatamodeId文件时在菜单>编辑器中自动生成“NSManagedObject”子类来验证这一点
project.setValue(object: agent, forKey: "agent")