2016-06-07 102 views
1

我想知道做managedObjectContext的最佳做法是什麼。當我第一次在今年早些時候開始學習swift/iOS/Xcode時,我在ViewControllers/TableViewControllers的每個類中都放了這行代碼。我應該爲每個ViewController創建一個新的managedObjectContext Swift

let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

,一切都正常工作。但後來我認爲我在某個時候讀了一些說,對每個ViewController/TableViewController使用相同的managedObjectContext。我解釋這意味着發送我的原始moc變量到每個ViewController/TableViewController。爲此,我開始在'prepareForSegue'函數中發送它。所以只有第一個視圖具有上面的代碼,而其他所有的只有var moc: NSManagedObjectContext?,它們將從prepareForSegue函數中設置。

但我學得越多,我開始覺得AppDelegate中創造實際managedObjectContextlet moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext線路只設置該managedObjectContext到商務部變量,而不是實際進行新managedObjectContext

所以我應該繼續使用prepareForSegue函數將我的moc變量發送到所有鏈接的ViewControllers/TableViewControllers,或者我應該不用擔心它,並且使用頂部的代碼來設置它?

謝謝。

+0

你幾乎肯定是對AppDelegate中創建一個對象,並通過你的參考是正確的。 **然而,在我看來,視圖控制器真的不應該知道如何獲取數據的機制。您可能需要查看MVC結構,其中Model對象負責數據和控制器與之通信,發送更改並接收當前狀態。 –

+0

如果你有興趣,你可以看看https://realm.io/news/slug-marcus-zarra-exploring-mvcn-swift/簡要地提到處理'managedObjectContext'的不同方法,但是談到你關於應用程序體系結構的更大問題。 – beyowulf

+0

謝謝,我一定會那樣做! –

回答

1
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

這是非常好的,因爲它不會創建新的上下文,而只是爲您提供對相同上下文的新參考。實際上,它與「在'prepareForSegue'函數中發送原始moc變量」沒有任何區別。你以兩種不同的方式完成同樣的事情,就是這樣。

閱讀有關值類型和引用類型在斯威夫特:Classes and structures

+0

非常感謝!試圖通過我的整個應用發送相同的moc變量變得單調乏味。 –

+0

不客氣,哥們! –

相關問題