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

Смежные вопросы