传统上,数据通过调用prepareForSegue传递给子控制器,例如,当单击表单元格时。
在iOS 7中,似乎有一个新的导航成语,您可以拖动屏幕的左边边缘以返回导航堆栈。当您启动手势时,子视图被移除并显示父视图,但是如果拖得不够远就会取消它,子视图会被取消,子视图会重新定位,但是没有prepareForSegue调用。此时子视图中的数据项是nil,这使我认为它是重新创建的。
如何正确地将数据传递给子视图控制器,该子视图控制器可以同时工作于segues和这个导航成语?
发布于 2013-11-16 07:36:30
你对视图控制器的看法是错误的,它是由被破坏的拖拽弹出的,但事实并非如此。当您开始拖动时调用viewWillDisappear,如果它取消,则调用viewWillAppear和viewDidAppear,但不调用viewDidLoad或dealloc,因此不会创建新的控制器。如果要将数据传递回执行拖动时出现的控制器,则应使用委托协议。您可以将该控制器设置为在执行原始推送时被推送的控制器的委托(或前进到该第二个控制器的segue )。而且,调用这些控制器父和子控制器是不正确的--它们都是导航控制器的viewControllers数组中的控制器。这两个控制器中任何一个的父控制器都是导航控制器。
发布于 2013-11-16 10:03:20
事实证明,实际原因与视图生命周期完全无关,但将数据项传递给详细视图这一事实被存储为弱引用。
NSArray*属性中。nil项。解决方案:将详细信息视图中的引用更改为strong。
https://stackoverflow.com/questions/20015879
复制相似问题