2011-12-28 33 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