2016-06-07 108 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

不客气,哥们! –

相关问题