問題 NSArrayController的=墜毀:關閉文檔窗口產生以下異常:NSPersistentDocument,故事情節和密切
An instance 0x600000140630 of class SimpleApp.Document was deallocated while key value
observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x6100000424f0> …
<NSKeyValueObservance 0x6100000c2f40: Observer: 0x6280000c7a10, Key path: managedObjectContext, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x6100000429a0>
和
-[NSAutoreleasePool drain]: This pool has already been drained, do not release it (double release).
這裏我做了什麼:使用:
創建一個新的Xcode項目- 使用故事板
- 創建基於文檔的應用
- 使用核心數據
在Document.xcdatamodeld
- 創建的實體(第二部分)與2-屬性,寬度和長度
在Main.storyboard,
拖動表格視圖(視圖爲基礎),2個按鈕(「添加」和「刪除」)和ArrayController到視圖控制器
ArrayController模式設置爲實體
綁定:
- 的tableView內容:ArrayController arrangedObjects,選擇索引:ArrayController selectionIndexes
- 2表視圖細胞結合到表格單元格視圖,的keyPath:objectValue.width和objectValue.length
現在第一個問題是綁定ArrayController managedObjectContext。我需要對Document子類的引用。所以,我在ViewController中添加
weak var document: Document? {
didSet {
print("ViewController, document didSet")
}
}
和綁定的ArrayController管理對象上下文給它(document.managedObjectContext)。
嘗試,但沒有成功,設置在不同的地方)這個VAR(ViewController.viewDidLoad(在一個NSWindowController子類的windowDidLoad()後,NSDocumentController.sharedDocumentController().documentForWindow(self.window!)
總是爲零。
我做了它的工作使用文檔以下.makeWindowControllers()
if let viewController = windowController.contentViewController {
viewController.setValue(self, forKey: "document")
}
所以,現在我可以創建一個新文檔,並將其保存,打開保存的文檔,但只要我關閉窗口,我得到的前一個異常。我在視圖控制器和文檔中添加了deinit方法,並在調用Document.deinit
之後但在ViewController.deinit
之前發生異常。所以它看起來像數組控制器仍然在觀察不再存在的Document managedObjectContext。
也許我錯過了一些很明顯的東西,但我找不到一個關於如何將故事板,數組控制器和文檔一起使用的簡單示例。順便說一句,我也試過沒有核心數據,並得到了同樣的例外。
修訂
我做了一個GitHub的項目 https://github.com/Miyan0/SimpleApp.git
重現崩潰的步驟:
- 創建一個新文檔
- 將它保存
- 重開文件
- 進行任何修改
- 點擊closebox(不保存)
- 崩潰
請提供示例代碼,以便更容易地爲您提供幫助。 –
謝謝Marek,我更新了這篇文章。我認爲問題在於文檔的autosavesInPlace,但即使設置爲false,如果關閉修改的文檔並在保存對話框中選擇「不保存」,我可以使應用程序崩潰。 – amasse
它給我這個警告http://imgur.com/MgBtblX,它崩潰後 –