dismissViewController但保留引用

时间:2013-11-12 16:12:28

标签: ios objective-c uiviewcontroller uistoryboard uistoryboardsegue

让我们说我有一个基本上存在带有视图的tabbarcontroller的应用程序。其中一个视图有一个按钮,它提供了一个模态视图控制器。此视图控制器的目的是输入一些数据,如名称,当按下开始时,它开始录制,因此它还保留对时间的引用并显示录制时间的总量。

(点击开始按钮后,按钮变为停止按钮)

在录制过程中,用户可以单击关闭按钮,该按钮将关闭视图控制器(保存名称和录制时间等变量),应用程序将返回其带有视图的tabbarcontroller。当用户在录制时再次按下按钮(显示模态视图控制器)时,必须向视频控制器显示先前输入的数据(名称,录制时间总量)。

因此,在运行以下代码后,此数据必须保持活动状态:

- (IBAction)close:(id)sender {
     [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
}

上面的代码将解除viewcontroller,但也会破坏该viewcontroller中的变量。在解除它之后保持在该viewcontroller中输入的变量的最佳方法是什么?

tabbarcontroller的视图是否应该对此数据负责?或者我应该保留对模态viewcontroller的引用并在后台保持活动状态?我将如何在代码中执行此操作?

最后,当用户通过单击模态视图控制器中的停止按钮停止录制并按下关闭按钮时,应该销毁此视图以保留内存。

4 个答案:

答案 0 :(得分:1)

如果要存储ViewController的整个实例,则应使用deallocation aborting方法创建Singleton类:

-(void)dealloc {
   abort();
}

但我认为你只想存储一些信息。您可以使用名为viewWillDissapear的{​​{1}}方法蚂蚁(在基于topViewController的应用中)传递它,并将一些变量分配到目的地。

此外,您可以使用单例数据模型,并在解除控制器时为其指定值。

我建议你做的是将ViewMtroller中的dataModel与单独的类强烈分开。

答案 1 :(得分:1)

实现这一目标的步骤:

  • 在ViewController的.h文件中声明你的Modal ViewController对象。
  • 在viewDidload中初始化它。
  • 在任何地方展示它。
  • 每当你解雇你的模态视图控制器时,它的变量都会保存。
  • 在重新初始化对象或弹出视图控件之前。
  • 答案 2 :(得分:1)

    2个单词 - 委托模式

    将事物分开是件好事。如果控制器应该创建一些数据,那么用一种方法定义一个协议,例如

    -(void)controller:(MYController *)controller didEnterData:(MYDataWrapper *)data;
    

    当用户点击close时,将消息发送给代理人。在创建控制器时,请设置委托。简单。

    答案 3 :(得分:-1)

    您可以在取消视图之前使用NSUserDefaults存储所需数据,并在视图加载时使用NSUserDefaults获取数据。