我有一个带有两个视图控制器的应用程序......父控制器,以及一个被压入堆栈的子控制器。
我编写了我的程序,只要调用父视图或子视图的viewDidAppear方法,就将networkClass的委托设置为父OR子句。
因此,问题是,我的子类有一些在父类中不需要的委托方法,因为父类从不进行某些网络调用。但是,当我在子类中启动网络调用,并在完成之前将BACK命中回父类时,父类现在被设置为委托。
但由于父类没有实现委托方法,因此崩溃了。
我可以知道解决方法吗?
答案 0 :(得分:1)
选项1:取消孩子viewWillDisappear
中的操作。
选项2:在networkClass
中,在调用之前检查方法是否已实现。
选项3 :(代码气味):在父代中实现存根。
在任何情况下你都应该取消操作(Op.1)。如果您在协议定义中将函数标记为optional
,则应该检查它是否存在(Op.2);如果没有,您应该收到编译器警告有关不完整的实现。不要忽略任何编译器错误,尤其是关于未实现的方法!如果完全实现它们没有意义,你应该认真考虑它们是否应该是可选的(2)。当然,您可以实现存根(-(void)callback1{}
),但这很少是正确的行动方案。