我从我的外观类调度通知,它从我的viewcontrollers中隐藏了模型的复杂性。 现在,我在第一个选项卡上有一个带有导航控制器的简单tab barbartroller。到目前为止这么好,一个非常典型的设计。 现在这个导航控制器在其堆栈上有两个视图控制器。 带有tableview的根MainViewController和带有几个视图的DetailViewController。
mainViewController是viewDidLoad中4个通知的观察者。 每个通知我有四种处理方法。我在dealloc中取消注册这些通知。
问题是当我在mainViewController中选择tableViewCell并将detailViewController压入堆栈时,然后当我返回主视图控制器时按下后退按钮,此时mainViewController作为观察者被移除通知Dispatch表,实际上它就像取消注册这些通知一样。
为什么会这样?是设计还是我遗失了什么?
mainViewController的实例没有被销毁,它仍然存在于导航堆栈中,dealloc没有被调用,为什么要取消注册呢?
快速而肮脏的解决方案是将注册通知给viewWillAppear,但我不喜欢它,因为这个注册代码多次运行不必要(viewDidLoad就足够了。)
任何帮助?
答案 0 :(得分:0)
[这是一个倾斜的答案,道歉。]
我猜你对标准的Apple做事方式不满意,并试图找到更好的东西。如果是这样的话,你并不孤单。
如果您不了解这些,可能需要查看"Model View ViewModel"概念,ReactiveCocoa和ReactiveViewModel。 ReactiveCocoa可以是一个陡峭的概念悬崖,但如果你已经冒险,那值得一试。