我有一个下载管理器,当数据准备好时,它会异步调用 viewController 的委托(delegate)方法,但是如果用户按下返回(viewController 被删除并释放),下载管理器会尝试向未定义的委托(delegate)发送消息。
为了避免这种情况,我试图在数据准备好时检查委托(delegate),以确保它不是 nil 并响应我试图调用的选择器。但是当我尝试检查它是否为 nil 时会引发异常。
我使用不保留的分配属性定义了委托(delegate)。
我应该如何检查以避免委派未定义的 Controller ?
谢谢
Best Answer-推荐答案 strong>
听起来好像您以错误的方式实现了委托(delegate)。
您的下载管理器应该包含一个名为例如的实例变量。 委托(delegate) 。在初始化下载管理器之后或期间,viewController 将自己设置为该下载管理器的委托(delegate) - 例如downloadManager.delegate = self;
一旦卸载/释放,您的 viewController 应该将那个确切的值归零 - 有点像 `
- (void)dealloc
{
downloadManager.delegate = nil;
...
[super dealloc];
}
现在下载管理器可以毫无问题地检查它自己的实例变量(委托(delegate))是否存在非 nil 等。
关于iphone - 将分配与委托(delegate)一起使用,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/8661343/
|