【问题标题】:iOS Retain multiple variables on a view after leaving then returning to itiOS在离开然后返回视图后保留视图上的多个变量
【发布时间】:2013-05-16 01:45:02
【问题描述】:

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

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

应用程序打开到 MainView 它显示一个表格 - 用户选择他们想要选择的类别。这将它们转移到 CategoryView。一旦做出选择,我将选择的类别发送回 MainView。通过

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

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

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

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

主视图界面

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

【问题讨论】:

  • 可能因为您没有“返回”到主视图,您可能正在创建一个新实例。你如何“回到”主视图(什么类型的 segue)?
  • 返回我已将 segue 设置为模态

标签: ios objective-c


【解决方案1】:

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

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

【讨论】:

  • 如果您不知道如何进行放松转场,请在此处查看我的答案。 stackoverflow.com/a/16160239/1285133
  • 好人,感谢您的解释。我会考虑使用 unwinds,不知何故我还没有听说过。
【解决方案2】:

当然,在发布后,我会立即看到一个我认为有帮助的帖子。解决方案是将值存储在运行良好的 AppDelegate 中。

但我觉得还有其他方法可以实现相同的结果,而不必依赖 AppDelegate,并且很想听听其他解决方案。

【讨论】:

  • 所以,如果这是一个不好的方法,即使它工作正常 - 你介意解释一下更合适的方法吗?这是一个小型内部应用程序,只有 8 个变量要存储,所以我看不出这样做有什么害处。只是努力学习最好的。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多