Я делаю приложение, похожее на iBooks.На экране есть кое-что, каждый элемент представлен в виде небольшого эскиза.Я хочу, чтобы пользователь мог удалять элементы так же, как при нажатии кнопки «Редактировать» в iBooks - появляется X и элемент удаляется.Я использую шаблон делегирования для обработки всего этого, поэтому вот некоторый код:
// Button is created in CustomView.h class
UIImage *deleteImage = [UIImage imageNamed:@"delete.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
self.deleteButton = button;
[self.deleteButton setImage:deleteImage forState:UIControlStateNormal];
[self.deleteButton addTarget:self action:@selector(deleteIt) forControlEvents:UIControlEventTouchUpInside];
// Here's what's called when the delete button is pushed
- (IBAction)deleteMap {
[self.customViewDelegate itemWasDeleted:self];
}
// And here's the implementation of that method, in a View Controller
- (void)itemWasDeleted:self:(CustomView*)customView {
// delete domain object
// . . .
[self.collectionOfCustomViews removeObject:customView];
[customView removeFromSuperview];
}
Проблема с этим кодом в том, что я получил исключение Bad Access Exception.Через NSZombie выглядит так:
* - [UIButton _unhighlight]: сообщение отправлено на освобожденный экземпляр 0x5f4a740
Я думаю, что происходиткогда вызывается моя реализация target-action, отпустить кнопку еще не безопасно, как я делаю в моем методе делегата.Итак, мой вопрос: как лучше подойти к этому, чтобы приложение не зависало?Я хотел бы знать самый чистый подход, возможный.