【问题标题】:Presenting another view controller that's not a parent呈现另一个不是父级的视图控制器
【发布时间】:2014-03-06 20:10:15
【问题描述】:

在故事板中,我有 3 个视图控制器:firstViewControllersecondViewControllercontrollerA

firstViewController 和 secondViewController 都有一个导航右栏项,它使用情节提要中的 segues 呈现 controllerA。

controllerA 有一个带有自定义表格单元格的 tableView。在customTableCell.xib 中有一个acceptButton,用于存储数据并弹回firstViewController。只有当用户使用 popViewController 从 firstViewController 转到 controllerA 时,我才能实现这一点。

编辑:但如果用户从 secondViewController 进入 ControllerA,我将无法执行此操作,因为 popToViewController 将无法工作。我尝试使用:

FirstViewController *recordViewController = [[FirstViewController alloc] init];
[self.navigationController pushViewController:recordViewController
                                     animated:YES];

编辑:我遇到了这个错误:

__NSArrayM insertObject:atIndex:]: object cannot be nil'

[SecondViewController recordCardNumber:recordCheckInID:]: unrecognized selector sent to instance 0x17d97250'

controllerA 和 firstViewController 之间存在委托关系。

我怎样才能正确地实现它?

编辑:这是 FirstViewController 中的委托:

#pragma mark - ControllerADelegate

- (void)recordCardNumber:(NSString *)number recordCheckInID:(NSString *)checkInID
{
self.CardNumbertext.text = number;
NSLog(@"record card# %@", self.CardNumbertext.text);
}

如果我使用,我正在传递数据并成功弹出到 firstViewController

[self.delegate recordCardNumber:number recordCheckInID:checkInID ];
[self.navigationController popViewControllerAnimated:YES];

如果我从 SecondViewController 输入 controllerA,它就会崩溃,因为我想在按下 acceptButton 后返回到 firstViewController。

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller poptoviewcontroller presentviewcontroller


    【解决方案1】:

    在点击按钮时显示第一个视图控制器:

    FirstViewController *recordViewController = [[FirstViewController alloc] init];
    [self.navigationController pushViewController:recordViewController
                                         animated:YES];
    

    但是,您得到错误的原因:

    __NSArrayM insertObject:atIndex:]:对象不能为nil

    很可能与弹出到上一个视图控制器无关,而是在按钮点击时更新数组。检查点击按钮时触发的代码。您很可能正在向 NSMutableArray 添加一个 nil 对象。

    【讨论】:

    • 是的,如果我要从 firstViewController 进入 ControllerA,这可以工作,但如果我从 secondViewController 进入 ControllerA,这不是我想要的,因为我想每次点击返回到 firstViewController我的 CustomTableCell 中的按钮。
    • 感谢您的帮助。但我认为它崩溃了,因为 firstViewController 和 controllerA 之间有一个委托。错误消息:-[FirstViewController recordCardNumber:recordCheckInID:]: unrecognized selector sent to instance 0xa503650
    • 你知道我该如何解决这个问题吗? recordCardNumber:recordCheckInID 是 firstViewController 中的一个委托函数
    • 在设置委托并向其传递数据时,使用代码更新您的问题。不看代码很难判断。
    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2014-12-12
    • 1970-01-01
    • 2012-03-16
    • 2016-11-20
    • 2019-09-11
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多