0

我有一些核心數據項目的麻煩。我有一個帶有NSManagedObjects的NSArrayController和+/- 按鈕。如果我在保存文件後刪除了一行中的對象,它可以很好地工作,但是如果我添加一個新對象並立即刪除它(不更改任何默認值),則出現錯誤:核心數據:錯誤,如果刪除未保存的對象

Serious application error. Exception was caught during Core Data change processing: Unknown number type or nil passed to arithmetic function expression. with userInfo (null) 
Unknown number type or nil passed to arithmetic function expression. 

如果我撤消添加新對象,情況也是如此。

任何人都可以給我一個指針該怎麼辦?我認爲這與它只有一個臨時ID有關,但如何解決它我不知道。

回答

1

我發現問題和解決方案。爲了記錄我會描述它。

問題是init函數中的對象本身添加了一個觀察者。這可能是觸發錯誤的原因。如果我在刪除對象之前刪除自己作爲觀察者,錯誤不會產生。

+2

你應該**不**覆蓋'NSManagedObject'的'-init ...'方法和它的'-dealloc'方法。如果你需要添加一個觀察者,你應該在'-awakeFromInsert'和'-awakeFromFetch'中執行。 – 2010-07-28 23:28:56

+0

根據文檔「覆蓋注意事項的方法」,initWithEntity:insertIntoManagedObjectContext:amd dealloc是否被允許覆蓋?我使用init而不是喚醒的原因是因爲我發現喚醒並不總是callen(如果用戶撤銷或某事)。但我可能是錯的。 – 2010-07-29 08:28:23

+0

你是正確的撤銷和重做,在10.6+有另外的方法awakeFromSnapshotEvent這也是撤銷/重做中調用。作爲10.5的解決方法,我更改了ManagedObjectContext以允許撤消和重做工作觀察http://github.com/mbrugger/CoreDataDependentProperties/blob/master/LPAutomatedObserving/Classes/LPManagedObjectContext.m – 2010-07-29 16:57:10

0

表通常不包含NSManagedObjects。相反,NSArrayController通過綁定或符合NSTableViewDataSource的對象將受管對象的屬性作爲值提供。在這些場景中提供的選定對象的刪除可以通過多種方式完成。問題是,你根本沒有解釋你的案例是如何建立的。

是否有可能刪除(無論您的按鈕連接到哪個目標/動作)是通過零還是意外?我可以想象一個類似的嚇人的錯誤,如果你問一個託管的對象上下文來刪除浮點值或其他一些隨機的東西...

+0

對不起,我有點快速的描述。正如你所說的一個持有這些對象的NSArrayController,並綁定到一個NSTableView。 我試圖把檢查對象,我要刪除的對象是正確的,它是。沒有什麼問題。這個錯誤也會先發生(1個或多個runloops) – 2010-07-28 16:11:18

+0

Ssssooooo .....你正在刪除對象嗎? *究竟*是如何約束的?幫助我們幫助你。 – 2010-07-28 16:52:57

+0

綁定完全在書後面。 NSArrayController設置爲實體模式,我的對象設置爲實體名稱。該表是綁定公關。在屬性上的列。我不認爲問題在這裏。 - 我試過不同的刪除方法。他們都產生相同的錯誤([arrayController removeObject:theObject]和[managedObjectContext deleteObject:theObject])但正如我所說,錯誤也是當我按撤消。所以只需通過sayin添加對象 - >撤消錯誤生成。 任何想法錯誤實際上意味着什麼? – 2010-07-28 17:55:31