使用assign with delegate

时间:2011-12-28 21:09:01

标签: iphone ios

我有一个下载管理器,在数据准备就绪时异步调用viewController的委托方法,但如果用户按下(viewController被删除并取消分配),下载管理器会尝试向未定义的委托发送消息。 为了避免这种情况,我试图在数据准备好时检查委托,以确保它不是nil并响应我试图调用的选择器。但是,当我尝试检查它是否为零时,会引发异常。

我使用assign属性定义了委托,但未保留。

我应该如何检查以避免委派未定义的控制器?

由于

2 个答案:

答案 0 :(得分:3)

听起来好像你已经错误地实现了委托。

您的下载管理器应该包含一个名为eg的实例变量delegate。在初始化下载管理器之后或之时,viewController将自己设置为该下载管理器的委托 - 例如downloadManager.delegate = self;

一旦卸载/ deallocs,你的viewController应该没有那个确切的值 - 有点像`

- (void)dealloc
{
    downloadManager.delegate = nil;
    ...
    [super dealloc];
}

现在,下载管理器可以检查自己的实例变量(委托)是否为nil等,没有任何问题。

答案 1 :(得分:0)

在我看来,最好的解决方案是不使用委托,而是使用NSNotificationCenter发送通知。
您的viewController应该为此通知定义了观察者。