我有一个下载管理器,在数据准备就绪时异步调用viewController的委托方法,但如果用户按下(viewController被删除并取消分配),下载管理器会尝试向未定义的委托发送消息。 为了避免这种情况,我试图在数据准备好时检查委托,以确保它不是nil并响应我试图调用的选择器。但是,当我尝试检查它是否为零时,会引发异常。
我使用assign属性定义了委托,但未保留。
我应该如何检查以避免委派未定义的控制器?
由于
答案 0 :(得分:3)
听起来好像你已经错误地实现了委托。
您的下载管理器应该包含一个名为eg的实例变量delegate
。在初始化下载管理器之后或之时,viewController将自己设置为该下载管理器的委托 - 例如downloadManager.delegate = self;
一旦卸载/ deallocs,你的viewController应该没有那个确切的值 - 有点像`
- (void)dealloc
{
downloadManager.delegate = nil;
...
[super dealloc];
}
现在,下载管理器可以检查自己的实例变量(委托)是否为nil等,没有任何问题。
答案 1 :(得分:0)
在我看来,最好的解决方案是不使用委托,而是使用NSNotificationCenter发送通知。
您的viewController应该为此通知定义了观察者。