按下后退按钮时传递数据

时间:2014-08-10 10:54:58

标签: ios objective-c

我正在尝试使用viewDidDisappear方法按下后退按钮时将数据传递给viewcontroller,这样可以正常工作。问题是即使我在目标viewController中创建了对象,它也找不到它?

property' rentTimeArray'在ViewControllerA类型的对象上找不到

我试图将一个nsarray从viewcontrollerB发送到viewcontrollerA

viewcontrollerB.m

首先导入目标头文件

import" 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 个答案:

答案 0 :(得分:0)

如果我很好理解您的问题,当用户点击rentTimeArray中的backButton时,您希望在ViewControllerA中设置ViewControllerB的值吗?如果是,那么您的代码有几个问题。首先:

你的rentTimeArray应该在ViewControllerA.h中声明,因为它应该对你的viewcontrollerB类之类的其他实例可见。

第二个问题:

您无法在ViewControllerA方法中初始化其他viewWillDisappear:animated,因为它会在导航堆栈中创建除当前现有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个viewControllers之间传递值。

相关问题