【发布时间】:2016-04-11 15:00:51
【问题描述】:
在为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:解决此问题的一种可能方法是从 Wheel“car”中删除反向关系。
【问题讨论】:
-
你的关系好像是两边设置成一对一的,你可以把
wheels改成to many -
谢谢你的建议,我以后会遇到这个问题的。