正确的方法来处理数据的持久化/导航控制器的流量?(Proper way to handle data

2019-10-23 12:16发布

通常情况下,如果我想将信息发送给我导航到一个视图控制器,我就指定它在像这样的prepareForSegue功能:

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

但据我了解,这个时候我创建要导航到视图控制器的新实例才有效。

说我有在具有(显示)SEGUE到不同的视图控制器导航栏的按钮,我想后,我弹出它,或者按下后退按钮坚持我在新的视图控制器的数据。 什么是这样做的最佳做法? 我不知道如何创建父视图控制器的引用。 现在,我只储存我需要全局变量的信息,但是如果觉得非常错误的。

我在做什么简单的例子:

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. 
}

我知道这是不是管理数据流的好方法,但我是新来的iOS和我不知道在这种情况下的最佳实践。 原谅我,如果我要问一个问题重复。 我不知道的术语非常好,所以我不知道该怎么寻找。

Answer 1:

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

如果你有一个导航控制器和你正在做的一个节目SEGUE,那么当你做一个流行的,你是从源(主/详细设计等)的信息传递到目标,然后它有一定道理传在prepareForSegue的信息。

可以通过引用传递的数据对象和具有源视图控制器保持该数据对象的引用。 然后,当源视图控制器viewWillAppear中火灾的方法,可以检查更改该数据对象并据此采取行动。

您还可以设置与委托财产的目的地视图控制器,使源视图控制器目的地的代表。 定义目标视图控制器使用它的委托进行通信的prototocol。

然后在目的地视图控制器,你可以发送邮件到授人以告诉它改变了用户进行。

如果你正在处理的数据具有全局意义的应用程序,然后使用某种应用程序范围内的共享数据存储是合理的。 我可能会在这种情况下使用的数据容器单。

什么方法最真的取决于你的视图控制器在做什么在你的应用程序设计中的数据的装置。



Answer 2:

有许多的方法可以从类持久化数据类,他们都有自己的优点和缺点。 一些最常见的有:

密钥值观测

志愿是苹果的最爱之一,并且可以非常强大。 它允许对象监视对其它对象的属性,并且当发生这些变化作出适当的反应。 伟大的教程大量的在那里,我已经联系苹果的志愿指南和教程NSHipster我发现有用的,当我开始。

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

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

NSNotificationCenter

该NSNotificationCenter允许对象播出可以通过在乎听任何其他对象进行听了通知。 这是比少志愿具体,可以用来传输数据,当你不知道究竟在那里的来自或谁需要它。 这个环节很漂亮比较志愿和NSNotificationCenter。

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

有各种其他方法,包括委托和回调,但是这肯定让你开始! 退房nshipster.com,当然还有苹果的文档吨伟大的开始资源,你遇到你不知道的概念。



文章来源: Proper way to handle data persistence/flow with navigation controllers?