Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 解除ViewController,但保留引用_Ios_Objective C_Uiviewcontroller_Uistoryboard_Uistoryboardsegue - Fatal编程技术网

Ios 解除ViewController,但保留引用

Ios 解除ViewController,但保留引用,ios,objective-c,uiviewcontroller,uistoryboard,uistoryboardsegue,Ios,Objective C,Uiviewcontroller,Uistoryboard,Uistoryboardsegue,假设我有一个应用程序,它基本上是一个带有视图的tabbarcontroller。其中一个视图有一个按钮,用于显示模式viewcontroller。此viewcontroller的用途是输入一些数据,如名称,当按“开始”时,它开始录制,因此它还保留时间参考并显示录制时间的总量 单击开始按钮后,该按钮变为停止按钮 在录制过程中,用户可以单击关闭按钮,该按钮将关闭保存变量(如名称和录制时间)的viewcontroller,应用程序将返回其tabbarcontroller和视图。当用户在录制过程中再次按

假设我有一个应用程序,它基本上是一个带有视图的tabbarcontroller。其中一个视图有一个按钮,用于显示模式viewcontroller。此viewcontroller的用途是输入一些数据,如名称,当按“开始”时,它开始录制,因此它还保留时间参考并显示录制时间的总量

单击开始按钮后,该按钮变为停止按钮

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

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

- (IBAction)close:(id)sender {
     [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
}
上面的代码将关闭viewcontroller,但也会销毁该viewcontroller中的变量。在取消viewcontroller后,保留该viewcontroller中输入的变量的最佳方法是什么

tabbarcontroller的视图是否应该对此数据负责?或者我应该保留对模态viewcontroller的引用,并在后台保持其活动状态?我如何在代码中实现这一点


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

如果要存储ViewController的整个实例,则应使用解除分配中止方法创建一个Singleton类:

-(void)dealloc {
   abort();
}
但我认为您只想存储其中的一些信息。您可以使用viewWillDissapear方法在基于UINavigationController的应用程序中调用topViewController传递它,并将一些变量分配给目标

此外,您还可以使用单例数据模型,并在关闭控制器时为其赋值


我建议您将dataModel从ViewController强烈地分离到单独的类中。

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

实现这一目标的步骤:

在ViewController的.h文件中声明模态ViewController的对象

在viewDidload中初始化它

无论你想在哪里展示它

无论何时关闭模态viewcontroller,其变量都保持保存状态


直到您重新初始化对象或弹出viewcontroller。

2个单词-委托模式

把东西分开很好。如果控制器应该创建一些数据,则使用一种方法定义协议,例如

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

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

在.h文件simples中声明ViewController的对象。基本上,你是说,创建一个模态ViewController的实例,并在关闭它时将ViewController设置为零,而不记录课程。请参见下面我的答案,我在示例项目中测试了它。对,我明白你的意思。类似于:有一个记录对象的模型。在录制期间设置此模型中的数据。然后只需关闭并销毁viewcontroller,当它再次出现时,只需从模型中获取数据。如果要使用singleton,请不要在dealloc方法中加入abort,dispatch_once是创建伪单例的标准。它并不实用,因为它还包含一个计时器,当按下start按钮时,计时器就会启动。我想我正在创建一个保存数据的单例数据模型。