按下返回按钮时传递数据
Posted
技术标签:
【中文标题】按下返回按钮时传递数据【英文标题】:passing data when pressing back button 【发布时间】:2014-08-10 10:54:58 【问题描述】:我正在尝试在按下后退按钮时将数据传递给视图控制器,因为我正在使用 viewDidDisappear 方法,该方法工作正常。问题是,即使我在目标 viewController 中创建了对象,它也找不到它?
在 ViewControllerA 类型的对象上找不到属性“rentTimeArray”
我正在尝试将 nsarray 从 viewcontrollerB 发送到 viewcontrollerA
viewcontrollerB.m
首先我导入目标头文件
导入“ViewControllerA.h”
viewDidDissapear 方法:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
if (self.isMovingFromParentViewController)
NSArray * values = [pickedArray allValues];
ViewControllerA *newHome = [[ViewControllerA alloc] init];
newHome.rentTimeArray = newHome;
ViewControllerA.m
@property (nonatomic, weak) NSArray *rentTimeArray;
ViewControllerA.h
@Synthenize rentTimeArray,
【问题讨论】:
【参考方案1】:如果我很好理解你的问题,当用户在ViewControllerB
中点击返回按钮时,你想在ViewControllerA
中设置rentTimeArray
的值,对吗?如果是,那么您的代码有几个问题。首先:
你的rentTimeArray
应该在ViewControllerA.h
中声明,因为它应该对像你的viewcontrollerB
类这样的其他实例可见。
第二个问题:
您不能在viewWillDisappear:animated
方法中初始化其他ViewControllerA
,因为它将在导航堆栈中创建除当前现有ViewControllerA
之外的其他实例。如果你想以这种方式实现这一点,你应该做这样的事情:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
if (self.isMovingToParentViewController)
for (UIViewController *controller in self.navigationController.viewControllers)
if ([controller isKindOfClass:[ViewControllerA class]])
ViewControllerA *viewControllerA = (ViewControllerA *)controller;
controller.rentTimeArray = [pickedArray allValues];
break;
不过,您应该了解委托或块模式以在 2 个视图控制器之间传递值。
【讨论】:
使用委托或块模式会更有效吗? 高效、更快、更易读,而且还具有“良好的编程风格”。如果你学习过一次委托和/或块模式,你就会爱上使用它们! 好的,我现在正在做委托模式,我会接受这个答案,因为它有效。提前谢谢你 在这种情况下使用协议!以上是关于按下返回按钮时传递数据的主要内容,如果未能解决你的问题,请参考以下文章