通过呈现新的视图控制器,viewWillDisappear在我取消订阅事件的地方被触发

本文关键字:事件 取消 视图 viewWillDisappear 控制器 | 更新日期: 2023-09-27 18:09:05

在我的主视图控制器上,我有一个按钮,显示另一个视图控制器,其中一些设置可以更改:

PresentViewController (new UINavigationController(anotherViewController), true, null);

对于anotherViewController的解散,父组件应该负责。我还必须知道是否有什么东西改变了(保存了)。因此,我使用事件。

我在父视图控制器的viewWillAppear中附加事件处理程序

anotherViewController.DismissMe += CancelEventHandler;
anotherViewController.SaveFilter += SaveEventHandler;

viewWillDisappear中,我取消订阅

anotherViewController.DismissMe -= CancelEventHandler;
anotherViewController.SaveFilter -= SaveEventHandler;

因为viewWillDisappear是在出现新的视图控制器时触发的,所以我自动取消订阅事件。当我想在anotherViewController中触发事件时,我不能,因为没有人订阅我的事件。

我必须取消订阅事件,否则视图控制器永远不会被释放。

我该如何解决这种情况?

通过呈现新的视图控制器,viewWillDisappear在我取消订阅事件的地方被触发

我当前的解决方案如下:

在我呈现新的视图控制器之前,我订阅了取消和保存(自定义创建的事件)的事件。因为呈现视图控制器在呈现视图控制器关闭或完成保存操作时获得这些事件(取消,保存),所以当我检索这些事件之一时,我删除了对这些事件(取消,保存)的订阅。我在事件处理程序中测试我是否取消订阅事件。

这样可以确保我只订阅一次,并且在需要时也可以退订。

有更多的方法,可以在我的问题的评论中找到。