正确的方式来处理导航控制器的数据持久性/stream量?

通常情况下,如果我想发送信息到视图控制器我正在浏览,我只是在prepareForSegue函数中指定它,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { let vc = segue.destinationViewController as! SomeViewController vc.info = self.info } 

但据我所知,这只适用于当我正在创build一个导航到视图控制器的新实例。

说我有一个导航栏中的button(显示)inheritance到一个不同的视图控制器,我想持久性数据,我有新的视图控制器后,我popup或按下后退button。 这样做的最佳做法是什么? 我不知道如何创build一个对父视图控制器的引用。 现在,我只是将我需要的信息存储在全局variables中,但如果感觉非常错误。

我正在做的事情的快速例子:

 var globalInfo:Int? class FirstViewController: UIViewController { //this view controller is connected to SecondViewController via a navigation //item that I created in the UI builder. It is a "show" segue //other code } 

两个控制器通过故事板连接

 class SecondViewController: UIViewController { //code //code func doWork { globalInfo = 0 // this is the global variable specified in the first view controller } //so now when I push back, globalInfo will still be set to 0. } 

我知道这不是一个pipe理数据stream的好方法,但我是iOS新手,我不知道这种情况下的最佳做法。 请原谅我,如果我问一个重复的问题。 我不太了解这个术语,所以我不知道要search什么。

有很多方法来处理这个问题。

如果你有一个导航控制器,而且你正在做一个show segue,那么当你完成了一个popup窗口,并且你将信息从源码传递到目的地(就像在主/细节devise中一样),那么通过prepareForSegue中的信息。

您可以通过引用传递数据对象,并让源视图控制器保留对该数据对象的引用。 然后当源视图控制器的viewWillAppear方法触发时,您可以检查数据对象的更改并采取相应的行动。

您也可以使用委托属性设置目标视图控制器,并使源视图控制器成为目标的委托。 定义目标视图控制器用来与其委托进行通信的协议。

然后,在目标视图控制器中,您可以将消息发送给委托,以告诉它有关用户所做的更改。

如果您正在处理的数据对您的应用程序具有全局意义,那么使用某种应用程序范围的共享数据存储是合理的。 在这种情况下,我可能会使用一个数据容器单例。

什么方法最好取决于你的视图控制器在做什么以及数据在你的应用程序devise中意味着什么。

有很多方法可以把课堂上的数据坚持下来,并且都有自己的优点和缺点。 一些最常见的是:

关键价值观察

KVO是苹果公司的最爱之一,而且可以非常强大。 它允许对象监视其他对象属性的变化,并在这些变化发生时作出适当的反应。 在那里有很多很棒的教程,我把苹果的KVO指南和我在开始时觉得有用的NSHipster教程联系起来。

Apple: https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

NSHipster: http ://nshipster.com/key-value-observing/

NSNotificationCenter

NSNotificationCenter允许对象广播任何其他可以倾听的对象的侦听通知。 它不像KVO那么具体,当你不确切地知道它来自哪里或需要它的时候,可以用来传输数据。 这个链接很好地比较了KVO和NSNotificationCenter。

NSHipster: http ://nshipster.com/nsnotification-and-nsnotificationcenter/

还有其他各种方法,包括委托和callback,但这一定会让你开始! 查看nshipster.com,当然还有苹果公司的文档,可以find很多不错的开始资源。