2015-09-06 88 views
1

我在OS X中有一個基於文檔的Cocoa應用程序,核心數據支持NSArrayController綁定到NSTableView和「添加」和「刪除」按鈕的列。核心數據NSArrayController不保存或撤消編程元素

這一切都很好,使用這些綁定添加和修改的對象被添加到撤消堆棧並按預期保存到文件。

但是,當我以編程方式編輯時,它會反映在表格中(因此它看起來像是NSManagedObjectContext),但沒有添加到撤消堆棧或保存到文件。

我錯過了什麼?一些設置在我的NSArrayController?或者在.addObject()之後撥打其他電話?

我聽說過「處理內容作爲複合值」與類似問題有關,但這似乎是使用Content Array綁定時的情況,而我並非如此。

回答

1

你是否在調用你的NSArrayController管理的數組上的.addObject()?這是行不通的,因爲你繞過了核心數據。

要以編程方式插入,請使用insertNewObjectForEntityForName(inManagedObjectContext)。然後陣列控制器將看到更改。或者在您的陣列控制器上調用add(),這是您的添加按鈕正在執行的操作。但insertNewObjectForEntityForName()是一個更好的選擇,因爲它將獨立於您是否擁有活動的NSDocument而工作。

+0

我在我的'NSArrayController'上調用'.addObject(instanceOfNSManagedObject)'。 'add()'按預期工作,但是當然會創建一個默認的初始化對象。 – Andy

+0

啊,它可以使用'.add()'或'.insertNewObjectForEntityForName(...)',然後設置對象參數,謝謝。雖然我仍然認爲如果'.addObject(...)'失敗,我必須設置錯誤。 – Andy

+1

數組上的addObject()將失敗。你要添加什麼對象?你用alloc/init創建的NSManagedObject?核心數據不同。你必須告訴MOC創建該對象。我相信你的設置是正確的,但你的插入代碼是錯誤的。我們可以看到嗎? –