我目前正在开发一个带有故事板的多视图应用程序。在每个视图中,用户通常可以通过文本框或按钮输入来输入数据。然后将该数据存储在数组中。
我的问题是:当我转回窗口时,会调用viewDidLoad
,因此会重置所有数据。有没有一种简单的方法(不需要简单地加载我的数组)来保留这些数据,好像没有调用viewDidLoad
?是否有一个在加载应用程序时调用的方法,而不仅仅是视图?或者也许是第一次只调用viewDidLoad
的方法?
我知道我可以通过加载我的数组来解决这个问题,我只是想知道是否有一个更简单,更优雅的解决方案。
编辑:
看来我的视图每次进入另一个视图时都会触发加载。我正在使用故事板segues。
答案 0 :(得分:2)
您可以使用NSUserDefaults
。在viewdidload
中检查您是否有数据然后加载数据或显示默认值。每次调用视图加载viewDidLoad
时。
答案 1 :(得分:1)
您可以创建root的子ViewControllers属性,这样当它们之间移动时它们就不会被释放。有明显的警告,当应用程序被杀死时,数据会丢失。
对于数组数据的永久存储,我建议调查NSCoding
。
答案 2 :(得分:0)
如果有人对我如何解决这个问题感兴趣,我会使用p列表。这是一个非常复杂的解决方法,但无论如何数据都需要在p列表中,所以这对我的要求来说并不是很好:
首先:
确保我们想要在开头运行一次的代码运行一次:
static dispatch_once_t once;
dispatch_once(&once, ^ {
//all code we want to run once goes here
}
其次,当视图消失时,将所有必需的数据写入plist:
(void) viewDidDisappear:(BOOL)animated
{
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentFolder = [path objectAtIndex:0];
filePath = [documentFolder stringByAppendingFormat:@"wantedData.plist"];
[wantedDataArray writeToFile:filePath atomically:YES];
}
最后,当视图加载(或出现)时,使用p-list的内容填充数组:
retrievedDataArray = [NSArray arrayWithContentsOfFile:filePath];
答案 3 :(得分:0)
从我收集的评论中,最好的方法是使用unwind segue。这可以按如下方式完成:
在segue中插入IBAction我想放松到:
<强>·H 强>
- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue;
<强>的.m 强>
- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue
{
//Allows us to unwind back to this segue
}
然后只需在我的第二个视图控制器中的按钮之间拖动并选择segue。
可以在这里找到一个很好的教程: