【问题标题】:How to pass data from one View Controller to another in a Storyboard when going back?返回时如何将数据从一个视图控制器传递到故事板中的另一个?
【发布时间】:2012-03-10 15:09:11
【问题描述】:

场景:

  • 以 UINavigationController 作为初始控制器的故事板。
  • MainVC(导航控制器的根 vc)需要用户在地图上选择一个位置。
  • MainVC 推送一个包含 MapKit 地图的 VC,并将其自身添加为用户选择位置时 MapVC 发出的通知的侦听器。
  • MapKit 是一个内存猪,我们都知道。 iOS 给我一个内存警告,我做了所有需要做的事情,然后 iOS 释放它可以释放的所有东西,包括 MainVC。
  • MapVC 发出通知,但没有人收听。用户选择的位置丢失了,就像雨中的泪水一样。

鉴于此,在返回 MainVC 时传递该位置数据的可靠方法是什么?我什至想把它写到 ~/tmp (这是我在处理像图像这样的大量数据时用来做的事情),但这似乎是在浪费机器。没有我可以挂钩的机制,比如导航控制器返回到前一个 VC 时触发的事件?就像,可以访问类似 prepareForSegue: 但在相反的方向会很好。

编辑我尝试过委托,但我的委托似乎仍然被释放。我是否坚持必须写入 ~/tmp?

【问题讨论】:

  • 委托是要走的路 - 听起来您的委托对象被解除分配有问题?
  • 我只能补充一点,如果我在 MainVC(现在是 MapVC.delegate)中注释掉 [super didReceiveMemoryWarning],它不会被释放。不过,我认为这属于不良行为。

标签: memory ios5 mapkit storyboard segue


【解决方案1】:

有关设置委托和委托协议的详细说明,请参见我的答案 - here

【讨论】:

  • 好的,委托工作并且即使在内存警告之后也能保持。现在的谜团是:为什么我在其中的字段和按钮不保留它们的值和状态?具体来说,我有一个 UITextView,其中包含一些被清除的文本,以及一些应该突出显示/启用但它们没有的按钮。
  • 我还可以确认这些字段保持正确的值和启用/突出显示的状态,它们只是在弹出 MapVC 时不显示。
  • 我不明白这个新问题。我有一个建议。接受这个答案,转换为 ARC 以清除您的记忆问题,并针对您仍然存在的问题写一个新问题。要在 Xcode 中将您的项目转换为 ARC,请选择“编辑”,然后选择“重构”,最后选择“转换为 ARC”。首先使用“文件”“创建快照”为您的项目拍摄快照,以防转换出现问题。
  • stackoverflow.com/questions/9366316/… 这是问题,感谢您的帮助。
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多