iOS在离开并返回视图后在视图上保留多个变量
问这个问题我觉得很无知,因为我知道它很简单。目标:离开后在视图上保留一个变量,然后返回到该变量 例如:假设我们有MainView、CategoryView和(drumroll)ProjectView 应用程序打开到MainView它显示一个表-用户选择他们想要选择的类别。此序列将它们添加到类别视图。选择后,我将所选类别发送回主视图。通过iOS在离开并返回视图后在视图上保留多个变量,ios,objective-c,Ios,Objective C,问这个问题我觉得很无知,因为我知道它很简单。目标:离开后在视图上保留一个变量,然后返回到该变量 例如:假设我们有MainView、CategoryView和(drumroll)ProjectView 应用程序打开到MainView它显示一个表-用户选择他们想要选择的类别。此序列将它们添加到类别视图。选择后,我将所选类别发送回主视图。通过 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 没问题。Mai
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
没问题。MainView接收变量并将所选类别显示为“类别”部分中的子文本。接下来,用户想要选择一个项目名称(这也是一个预定义的列表),他们选择项目,我将变量发送回MainView
--现在有人可以(温和地)向我解释一下,为什么当我返回到主视图时,以前保存“Selected”类别的NSString变量现在为空
所以我的NSString SELECTED项目没有被保留,对吗?我应该在这里执行的正确实现是什么?或者我错过了什么?我真的很想了解发生了什么,所以任何事情都会有很大的帮助
MainView界面
@interface MainViewController : UIViewController {
NSString *selectedProjectName;
NSString *selectedCategory;
}
@property (nonatomic, retain) NSString *selectedProjectName;
@property (nonatomic, retain) NSString *selectedCategory;
@end
MainView实现
@implementation MainViewController
@synthesize selectedCategory, selectedProjectName;
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"masterSegue"]) {
MainViewController *vc = (MainViewController *)[segue destinationViewController];
LogValues *lv = [LogValues alloc];
lv.project = @"Test Project Name";
vc.selectedProjectName = lv.project;
}
}
如果你需要的话。。
项目视图实施
@implementation MainViewController
@synthesize selectedCategory, selectedProjectName;
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"masterSegue"]) {
MainViewController *vc = (MainViewController *)[segue destinationViewController];
LogValues *lv = [LogValues alloc];
lv.project = @"Test Project Name";
vc.selectedProjectName = lv.project;
}
}
因此,当然,在发布之后,我立即看到了一条我认为有帮助的线索。解决方案是将这些值存储在运行正常的AppDelegate中
但是,我觉得有其他方法可以在不依赖AppDelegate的情况下实现相同的结果,我希望听到其他解决方案。好的,您的问题是您没有返回到相同的实例。关于segues,您错过了一件非常重要的事情——它们总是实例化新的视图控制器。因此,当您使用模态序列“返回”主视图控制器时,您只是在创建该控制器的新实例。在故事板中,除了使用“展开”序列外,您永远不应该后退(到早期的控制器)。展开是关于分段始终创建新实例的规则的例外
所以,你有两个选择。您可以使用展开序列,这很好,因为您仍然可以实现prepareForSegue将数据发送回目标控制器,或者根本不能使用序列,使用DismissViewControllerInitiated:completion:返回,并使用委托发送回数据。可能是因为您没有“返回”到主视图,您可能正在创建一个新实例。如何“返回”到主视图(什么类型的segue)?返回时,我将segue设置为modalIf。如果您不知道如何进行放松segue,请参见我的答案。太好了,谢谢你的解释。我会研究一下如何使用展开,我还没有听说过。所以,如果这是一种不好的方法,即使它很好用,你介意解释一下更合适的方法吗。这是一个小的内部应用程序,只需要存储8个变量,所以我不认为这样做有什么害处。只是想学最好的。