iOS查看保留数据

时间:2014-04-28 11:58:51

标签: ios objective-c uistoryboard viewdidload

我目前正在开发一个带有故事板的多视图应用程序。在每个视图中,用户通常可以通过文本框或按钮输入来输入数据。然后将该数据存储在数组中。

我的问题是:当我转回窗口时,会调用viewDidLoad,因此会重置所有数据。有没有一种简单的方法(不需要简单地加载我的数组)来保留这些数据,好像没有调用viewDidLoad?是否有一个在加载应用程序时调用的方法,而不仅仅是视图?或者也许是第一次只调用viewDidLoad的方法?

我知道我可以通过加载我的数组来解决这个问题,我只是想知道是否有一个更简单,更优雅的解决方案。

编辑:

看来我的视图每次进入另一个视图时都会触发加载。我正在使用故事板segues。

4 个答案:

答案 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。

可以在这里找到一个很好的教程:

What are Unwind segues for and how do you use them?