Здесь я нашел много вопросов о методе делегатов и пробовал много вариантов, но все же имеет исключение BAD_ACCESS.Делегат с асинхронным обратным вызовом
Мое приложение получает данные из сети асинхронно через NSUrlConnection. Я использую специальный объект обмена данными с делегатом в VC.
С опцией отладки NSZombies я получаю сообщение: [MyViewController tableView: titleForHeaderInSection:]: сообщение отправлено на освобожденный экземпляр 0x79698490.
VC:
@property DataManager *man;
- (void)viewDidLoad {
...
man = [[DataManager alloc] initWithDelegate:self];
...
}
- (void) myDelegateSelector {
// DataManager call this method when data is ready
... save data ...
_tableView reloadSections ... // refresh content
}
DataManager:
@property (weak, nonatomic) id <DataManagerDelegate> delegate;
- (id) initWithDelegate:(id <DataManagerDelegate>)delegate {
...
_delegate = delegate;
}
- (void) receiveSomeData {
...
dispatch_async(dispatch_get_global_queue(0, 0), ^{
... receive data work in global queue
if (_delegate)
// going back to the main queue cause need to change on screen data
dispatch_async(dispatch_get_main_queue(), ^{
if ([_delegate respondsToSelector:@selector(myDelegateSelector:)])
[_delegate myDelegateSelector];
});
});
}
это означает, что ваш MyViewController в настоящее время освобождаться, пока вы пытаетесь заставить его сделать что-то. кто создает/управляет вашим MyViewController? В вашем коде не отображается какой контроллер. – mitrenegade
Да, я знаю. VC, созданный родительским контроллером. Когда пользователь быстро нажимает кнопку «назад», данные все еще загружаются, и иногда я получаю исключение. –