我正在開發iOS應用程序的Mac OS端口,並且在基於Storyboard的Cocoa應用程序中使用NSArrayControllers時會遇到NSManagedObjectContexts的問題。Cocoa Storyboard中的CoreData ArrayControllers
這是一種後續問題:我有一個TabBarController呈現像一些ViewControllers,表現出同樣的CoreData實體 Storyboard with TabViewController in OS X Application - Core Data Array Controllers in each scene?
。它們通過與InterfaceBuilder連接的NSArrayControllers加載。
從我現有的知識來看,在屏幕上獲取數據是沒有問題的。即使編輯和保存到CoreData的作品。 但我意識到,每個Storyboard場景都有自己的NSArrayControllers實例和每個自己的NSManagedObjectContext實例。 當在一個屏幕上更改和保存數據時,它不會在其他屏幕上更新,這些屏幕都通過IB綁定綁定,並在所有其他情況下工作。他們只是顯示數據,他們已經加載並且不會自動更新。
我認爲問題是,來自contextA的已更改數據未合併(或同步)到其他屏幕的其他上下文。
這樣做的最好方法是什麼?我應該使用NSManagedObjectContextDidSaveNotification嗎?
這將意味着,我將不得不編寫大量的代碼,手動開始將更改從一個上下文合併到所有其他NSManagedContexts。對我來說味道真的不好。我認爲必須有一個更簡單的方法,我不知道和不能發現。
如果您對我有任何提示,請將我貼在正確的方向上。 非常感謝。
使用一個MOC。將每個陣列控制器綁定到該MOC。你不應該有很多,如果它是所有主線程圖形用戶界面的東西。 – stevesliva
感謝您的評論。實際上,我認爲我這樣做了,將所有ArrayController綁定到AppDelegate.moc,但是在調試控制器時,我發現它們都具有不同的MOC實例?! – Bernd
問題解決了,我用Cocoa Bindings做了一個錯誤的錯誤:我只是將故事板中的一個對象拖到每個場景並將其設置到AppDelegate。我剛剛用這個實例化了幾個AppDelegates,非常糟糕的主意!我糾正了這一點,通過我的ViewControllers上的屬性引用AppDelegate,現在它可以正常工作。國際文憑組織有其小小的優勢,人們必須清醒地意識到發生了什麼。謝謝你的評論,它讓我思考,我的問題在哪裏! – Bernd