我有一个视图控制器,它获取由视图控制器设置的属性。
基本上,我有类似
的东西- (void)doStuff {
[self performSegueWithIdentifier:@"segueToThing" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"segueToThing"])
[(ThingViewController *)[segue destinationViewController] setImportantData:[self importantData]];
}
问题是,如果我按ThingViewController
然后在其上推送另一个视图控制器,然后发出内存警告,我的ThingViewController
将被卸载以释放内存。然后我弹出第三个视图控制器,我的ThingViewController
再次被加载,但我在segue中设置的importantData
属性现在是nil
,因为segue没有被再次触发。
我该怎么办?我应该将我所有的州存放在哪里......?
答案 0 :(得分:0)
如果您不想释放该内存,请不要在内存警告或viewDidUnload中释放它。
如果需要释放内存,请保留数据,然后在VC恢复时重新加载。
答案 1 :(得分:-3)
也许将重要数据存储在AppDelegate
中?在AppDelegate.h文件中声明一个NSData
对象或需要保存的任何对象。然后在prepareForSegue
期间,您会得到AppDelegate
的引用,如下所示:
AppDelegate *appDel = [[UIApplication sharedApplication] delegate];
然后使用您在AppDelegate中保存的变量保存对象。然后,当再次加载第二个视图时,再次调用AppDelegate并使用App Delegate中的数据。希望这可以帮助。如果您需要更多帮助或者我不清楚,请告诉我。