Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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视图保留数据_Ios_Objective C_Uistoryboard_Viewdidload - Fatal编程技术网

iOS视图保留数据

iOS视图保留数据,ios,objective-c,uistoryboard,viewdidload,Ios,Objective C,Uistoryboard,Viewdidload,我目前正在开发一个带有故事板的多视图应用程序。在每个视图中,用户可以输入数据,通常通过文本框或按钮输入。然后将这些数据存储在数组中 我的问题是:当我传输回窗口时,会调用viewDidLoad,因此会重置所有数据。是否有一种简单的方法(无需简单地加载我的数组)来保留此数据,就好像没有调用viewDidLoad一样?是否有在加载应用程序时调用的方法,而不仅仅是视图?或者第一次只调用viewDidLoad的方法 我知道我可以通过加载我的数组来解决这个问题,我只是想知道是否有一个更简单、更优雅的解决方案

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

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

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

编辑:


每次转到另一个视图时,似乎都会触发“我的视图已加载”。我正在使用故事板分段

您可以使用
NSUserDefaults
。在
viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloaded
viewDidLoad
时。

您可以使用
NSUserDefaults
。在
viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloaded
viewDidLoad
时。

您可以使用
NSUserDefaults
。在
viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloaded
viewDidLoad
时。

您可以使用
NSUserDefaults
。在
viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloaded
viewDidLoad
时。

您可以将子ViewController属性设置为根的属性,这样在它们之间移动时它们就不会被释放。有一个明显的警告,当应用程序被终止时,数据将丢失


对于数组数据的永久存储,我建议查看
NSCoding

您可以将sub-ViewControllers属性设置为root,这样在它们之间移动时它们就不会被释放。有一个明显的警告,当应用程序被终止时,数据将丢失


对于数组数据的永久存储,我建议查看
NSCoding

您可以将sub-ViewControllers属性设置为root,这样在它们之间移动时它们就不会被释放。有一个明显的警告,当应用程序被终止时,数据将丢失


对于数组数据的永久存储,我建议查看
NSCoding

您可以将sub-ViewControllers属性设置为root,这样在它们之间移动时它们就不会被释放。有一个明显的警告,当应用程序被终止时,数据将丢失


对于数组数据的永久存储,我建议查看
NSCoding

如果有人对我如何解决这个问题感兴趣,我使用了p-list。这是一个很好的解决方法,但数据无论如何都需要在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列表的内容填充数组:

    retrievedDataArray = [NSArray arrayWithContentsOfFile:filePath];

如果有人想知道我是如何解决这个问题的,我已经使用了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列表的内容填充数组:

    retrievedDataArray = [NSArray arrayWithContentsOfFile:filePath];

如果有人想知道我是如何解决这个问题的,我已经使用了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列表的内容填充数组:

    retrievedDataArray = [NSArray arrayWithContentsOfFile:filePath];

如果有人想知道我是如何解决这个问题的,我已经使用了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列表的内容填充数组:

    retrievedDataArray = [NSArray arrayWithContentsOfFile:filePath];

从我收集到的评论来看,最好的方法是使用“放松”序列。这可以通过以下方式完成:

将iAction插入我要展开的序列:

.h

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue;
.m

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue
{
    //Allows us to unwind back to this segue
}
然后简单地在我的第二个视图控制器中的按钮之间按住ctrl键拖动并选择segue

可以在此处找到有关此方面的良好教程:


从我收集的评论中可以看出,最好的方法是使用“放松”序列。这可以通过以下方式完成:

将iAction插入我要展开的序列:

.h

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue;
.m

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue
{
    //Allows us to unwind back to this segue
}
然后简单地在我的第二个视图控制器中的按钮之间按住ctrl键拖动并选择segue

可以在此处找到有关此方面的良好教程:


从我收集的评论中可以看出,最好的方法是使用“放松”序列。这可以通过以下方式完成:

将iAction插入我要展开的序列:

.h

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue;
.m

- (IBAction)unwindToMain:(UIStoryboardSegue *)unwindSegue
{
    //Allows us to unwind back to this segue
}
然后简单地在我的第二个视图控制器中的按钮之间按住ctrl键拖动并选择segue

可以在此处找到有关此方面的良好教程:


从我收集的评论来看