2016-04-11 48 views
0

當設置爲coredata一個NSManagedObject的屬性(NSSet中),它在運行時將顯示此錯誤:迅速coredata - 無法識別的選擇發送到實例

-[__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模型如下:

Car

Wheel

編輯:車關係 「輪子」 現在是一個一對多的關係。

編輯#2:代碼已更新。

編輯#3:一個可能的辦法解決這個問題是消除來自輪胎的「汽車」的反比關係。

+1

看來,你們的關係被設定爲一個一對一,你可能想改變''輪子到''很多' – zcui93

+0

謝謝你的建議,我以後會遇到這個問題。 – user328414

回答

0
var wheel_obj_array = [NSManagedObject]() 

應該

var wheel_obj_array = car_obj.mutableSetValueForKey("wheels") 
wheel_obj_array.addObject(wheel_obj) 

也真的不應該使用在_瓦爾其很難讀什麼。

+0

謝謝你的兩個建議,但我已經更新了它,但它創建了以下錯誤:*** - [NSSet intersectsSet:]:set參數不是NSSet - 在這一行上:wheelObjArray.addObject(wheelObj) – user328414

+0

是關係雙向一對一? – SeanLintern88

+0

我已更新Car「wheels」以成爲一對多並卸載/重新安裝應用程序,但新錯誤仍在顯示。 – user328414

0

car_obj.setValue(NSSet(object: wheel_obj), forKey: "wheels")應該工作。

wheel_obj.setValue(car_obj, forKey: "relationship")會自動設置反向關係,其中可能更容易寫入和讀取。

順便說一句,你可能想在Wheel的關係改變爲car而不是當前混淆relationship

+0

car_obj.setValue(NSSet(object:wheel_obj),forKey(「wheels」))沒有工作,所以我試過car_obj.setValue(NSSet(object:wheel_obj),forKey:「wheels」),並沒有改變錯誤:( – user328414

+0

)使用我提到的第二個選項會更好/更容易,錯誤似乎是「對許多」沒有正確設置,您可以通過在菜單>編輯器中自動生成'NSManagedObject'子類來驗證這一點,同時選擇.xcdatamodeId文件 – zcui93

-1

在我的情況下,它通過刪除NSSet。當錯誤發生了,我使用的代碼是:

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

然後讓它工作我把它改爲:

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

謝謝

相關問題