【问题标题】:Call Delegate Method Prior to View Dismissal在 View Dismissal 之前调用 Delegate 方法
【发布时间】:2014-01-14 13:51:32
【问题描述】:

我有一个模态视图控制器,在我关闭它之前,我需要调用一个委托方法来告诉父视图控制器更新。 (因为在关闭模态视图控制器时不会调用像 viewWillAppear 这样的方法)。

所以我的代码如下所示:

[delegate addEquipmentDidSave:YES];
[self dismissViewControllerAnimated:YES completion:nil];

非常简单。回个消息说,马上更新!然后只是关闭视图。然而,虽然这两行都被调用,但委托方法永远不会运行。所以我检查它设置的委托是否正确。当我呈现模态视图时,我设置了委托,因此它全部连接。

就好像委托方法在视图被关闭之前没有机会运行一样。这可能吗?您认为可能是什么问题?

谢谢。

【问题讨论】:

  • 你在运行代码时检查了委托设置了吗?
  • 如果委托相关的事情没问题,只需尝试关闭委托方法内的视图。?
  • @C_X 为什么?什么时候已经有可以在dismissal方法中使用的完成块了?
  • @Abizern 完成块将在视图关闭后运行,并且 josh 希望它应该首先更新视图然后关闭其他模式视图。这就是为什么我说要测试其他一切是否正常。
  • 没有看到addEquipmentDidSave的正文就不能准确地说,但我认为它没有更新,因为它在模态视图控制器的后台。

标签: ios iphone objective-c delegates modalviewcontroller


【解决方案1】:

在调用您的委托方法之前,首先检查它是否可用

if ([self.delegate respondsToSelector:@selector(addEquipmentDidSave:)] )
{
    NSLog("Yes it's available");
    [self.delegate addEquipmentDidSave:YES];
}

[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

  • 我一直不知道如何使用respondsToSelector,导致我遇到了问题!原来我是从两个地方展示模态视图。导致只有一项设置正确。
【解决方案2】:

你看到最后一个参数,叫做completion吗?在视图控制器关闭后调用该块。在那里做你想做的事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2023-04-08
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多