iOS视图保留数据
我目前正在开发一个带有故事板的多视图应用程序。在每个视图中,用户可以输入数据,通常通过文本框或按钮输入。然后将这些数据存储在数组中 我的问题是:当我传输回窗口时,会调用iOS视图保留数据,ios,objective-c,uistoryboard,viewdidload,Ios,Objective C,Uistoryboard,Viewdidload,我目前正在开发一个带有故事板的多视图应用程序。在每个视图中,用户可以输入数据,通常通过文本框或按钮输入。然后将这些数据存储在数组中 我的问题是:当我传输回窗口时,会调用viewDidLoad,因此会重置所有数据。是否有一种简单的方法(无需简单地加载我的数组)来保留此数据,就好像没有调用viewDidLoad一样?是否有在加载应用程序时调用的方法,而不仅仅是视图?或者第一次只调用viewDidLoad的方法 我知道我可以通过加载我的数组来解决这个问题,我只是想知道是否有一个更简单、更优雅的解决方案
viewDidLoad
,因此会重置所有数据。是否有一种简单的方法(无需简单地加载我的数组)来保留此数据,就好像没有调用viewDidLoad
一样?是否有在加载应用程序时调用的方法,而不仅仅是视图?或者第一次只调用viewDidLoad
的方法
我知道我可以通过加载我的数组来解决这个问题,我只是想知道是否有一个更简单、更优雅的解决方案
编辑:
每次转到另一个视图时,似乎都会触发“我的视图已加载”。我正在使用故事板分段 您可以使用
NSUserDefaults
。在viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloadedviewDidLoad
时。您可以使用NSUserDefaults
。在viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloadedviewDidLoad
时。您可以使用NSUserDefaults
。在viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloadedviewDidLoad
时。您可以使用NSUserDefaults
。在viewdidload
中,检查是否有数据,然后加载数据或显示默认值。每次调用viewloadedviewDidLoad
时。您可以将子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
可以在此处找到有关此方面的良好教程:
从我收集的评论来看