2011-12-28 60 views
2

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

我使用assign属性不保留定义委托。

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

谢谢

回答

3

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

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

你的viewController应该为零,一旦卸载,准确的价值/ deallocs - 有点像`

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

现在下载管理器可以检查非零等它自己的实例变量(代表)没有任何问题。

+0

我缺少的一点是将委托设置为零,当我的控制器处理。谢谢:) – Arouri

0

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

+0

对我而言,使用NotificationCenter是一个有效的解决方案,但使用委托更合适。谢谢:) – Arouri

+0

我通常不会建议不使用代表团。代表团对于1对1的关系非常有用,并使其显而易见。每当我有1到N的关系时,我都会使用通知。 – Till