iOS在离开之后保留视图上的多个变量然后返回它

时间:2013-05-16 01:45:03

标签: ios objective-c

我对这个问题感到无知,因为我知道这很简单。目标:在离开后保留视图上的变量然后返回到它。

例如:假设我们有 MainView CategoryView 和(drumroll) ProjectView

应用程序打开 MainView 它会显示一个表 - 用户选择他们想要选择一个类别。这个segue是 CategoryView 。选择完成后,我将所选类别发送回 MainView 。通过

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

这里没问题。 MainView接收变量并在“类别”部分中将所选类别显示为子文本。接下来,用户想要选择一个项目名称(这也是一个预定义的列表)他们选择该项目,然后将变量发送回MainView。

- 现在有人可以(温和地)向我解释为什么当我返回主视图时,之前持有“已选择”类别的NSString变量现在为空?

所以我的NSString selectedProject没有被保留正确吗?我应该在这里做的正确实施是什么?或者我错过了什么?我真的想了解最新情况,所以任何事情都会有很大的帮助。

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;

如果你需要它.. ProjectView实施

  -(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;
    } 
    }

2 个答案:

答案 0 :(得分:0)

好的,你的问题是你没有回到同一个实例。你错过了关于segue的一个非常重要的事情 - 他们总是实例化新的视图控制器。因此,当您使用模态segue“返回”主视图控制器时,您只需创建该控制器的新实例。你不应该使用除了展开segue之外的任何东西在故事板中倒退(对于早期的控制器)。关于segue始终创建新实例的规则是不可避免的。

所以,你有两个选择。您可以使用unwind segue,这很好,因为您仍然可以实现prepareForSegue将数据发送回目标控制器,或者您根本不能使用segue,并使用dismissViewControllerAnimated:completion:返回,并使用委托发回数据。

答案 1 :(得分:-1)

当然,在发布后我立即看到我认为有帮助的一方的帖子。解决方案是将值存储在 AppDelegate 中,该工作正常。

我觉得有其他方法可以实现相同的结果,而不必依赖AppDelegate,并希望听到其他解决方案。