2012-11-04 52 views
1

我真的scratchng我的頭試圖找出在我的管理對象上下文消失到。的NSManagedObjectContext傳遞到NSWindowController成爲零

我本來實例是我的應用程序委託中,然後使之成爲一個保留的財產的NSWindowController內,例如:

self.TPWC = [[TestPanelWindowController alloc] initWithWindowNibName:@"TestPanel"]; 
self.TPWC.managedObjectContext = self.managedObjectContext; 
self.TPWC.persistentStoreCoordinator = self.persistentStoreCoordinator; 
[TPWC.window makeKeyAndOrderFront:nil]; 

然後我有一個按鈕,應該實例化一個NSManagedObject並將其插入到這樣的管理對象上下文:

NSManagedObject *newInstanceOfSomeEntity = 

[NSEntityDescription insertNewObjectForEntityForName:@"SomeEntity" 
inManagedObjectContext:self.managedObjectContext]; 

在這一點上,self.managedObjectContext已儼然成爲零。

我已經在windowDidLoad中插入了一個斷點,我可以確認在這一點上,我們確實有一個NSManagedObjectContext的有效實例,但它在viewDidLoad之間以某種方式成爲零,然後嘗試插入托管對象。

我試着創建自定義初始化器設置NSManagedObjectContext但它仍然成爲零。

核心數據是相當新的給我,我努力理解什麼錯。

+0

是自己財產的強勁性能? – NSAddict

+0

你的'@property managedObjectContext'是如何定義的? –

+0

是的,這是一個強大的財產。 – Will

回答

2

這不是一個直接的答案,爲何您會看到您的上下文消失,但它仍然可以解決您的問題:

從架構的角度來看,你真的不應該繞過的管理對象上下文對象,特別是UI對象。

相反,你應該有一個全球單獨的類實例化管理對象上下文(與協調和持久性存儲一起,大概),然後通過提供一個公共屬性訪問它。然後,從你的窗口控制器,你可以從單身對象訪問它。

(A側面說明,如果你正在使用多線程,要小心訪問和使用來自不同的線程相同的上下文中)。

+1

你可能會說。在wwdc09蘋果有這樣做的例子:通過了周圍的物體。它不是壞IMO它使風險投資中分離和可重複使用 –

+0

你是對的 - 它沒有解釋爲什麼我看到的情況下消失,但打電話來的單身是在實例的有效解決辦法,所以我會接受的答案和獲獎賞金最終看到解決方案*解決了問題。 – Will

相關問題