Получение «отменено, пока наблюдатели ключевых значений по-прежнему зарегистрированы с ним». Ошибки после преобразования в ARC

Я использую этот класс:

https://github.com/alexleutgoeb/ALPickerView

Поскольку я конвертировал в ARC, я получаю эту ошибку после нажатия на pickerview пару раз:

2011-10-18 14:10:19.424 MappingApp[3398:10d03] An instance 0x73c7cd0 of class CustomTapGestureRecognizer was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: <NSKeyValueObservationInfo 0x5d93430> (<NSKeyValueObservance 0x5d933f0: Observer: 0x5d66eb0, Key path: state, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x746b180>) 

Ошибка указывает на класс CustomTapGestureRecoginizer и последнюю строку этого метода:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; // Simple hack, set recognizer state to possible as tap begins self.state = UIGestureRecognizerStatePossible; } 

В checkview у меня есть этот метод:

 - (void)didMoveToSuperview { gestureRec = [[CustomTapGestureRecognizer alloc] initWithTarget:nil action:nil]; gestureRec.numberOfTapsRequired = 1; [gestureRec addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil]; [[self superview] addGestureRecognizer:gestureRec]; } 

И removeObserver, который, как я знаю, может вызвать эту проблему, находится в dealloc checkview. Должен ли я переместить это в другое место? Есть ли у кого-нибудь другие идеи, что может вызвать эту проблему? Это никогда не происходило до ARC.

One Solution collect form web for “Получение «отменено, пока наблюдатели ключевых значений по-прежнему зарегистрированы с ним». Ошибки после преобразования в ARC”

Я бы предположил, что метод didMoveToSuperview в классе CheckView вызывается более одного раза, заставляя gestureRec экземпляра gestureRec переназначать, а предыдущий экземпляр CustomTapGestureRecognizer считал, что ARL не имеет ссылок, а затем освобождается (вызывая предупреждение о том, что кто-то еще соблюдая этот пример).

Попробуйте добавить NSLog(@"didMoveToSuperview: self=%@ gestureRec=%@", self, gestureRec); до начала didMoveToSuperview чтобы убедиться, что это так.

Если так быстро исправить, вероятно, что-то вроде этого, но я не пробовал сам или много знаю о коде.

 - (void)didMoveToSuperview { if (gestureRec != nil) { [gestureRec removeObserver:self forKeyPath:@"state"]; } gestureRec = [[CustomTapGestureRecognizer alloc] initWithTarget:nil action:nil]; gestureRec.numberOfTapsRequired = 1; [gestureRec addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil]; [[self superview] addGestureRecognizer:gestureRec]; } 
  • извлечение свойств из NSArray объектов
  • Проблема с UIPopoverController presentPopoverFromRect
  • Наблюдайте, когда UITabBar скрыт от делегата
  • Вычислить максимальный размер шрифта, который подходит для прямоугольника?
  • Изменяет ли название кнопки предупреждение о дальнейших действиях?
  • iOS - AVPlayer seekToTime перезапускает воспроизведение currentItem
  • Как показать ярлык загрузки над UITableView?
  • Почему мой CGGradient не работает с предустановленным UIColor?
  • Ссылки на Crashlog, на которые .dSYM
  • Зачем использовать NSFileManager, а не просто использовать метод writeToFile NSData: atomically: при создании нового файла?
  • kCAFilterNearest фильтр махинации (UIImageView)
  • Interesting Posts

    Есть ли хороший учебник для пользовательской реализации клавиатуры в iOS?

    Возможно ли опубликовать opengraph на стене / канале / тикере пользователей БЕЗ запуска моего собственного сервера?

    .bounds vs .keyWindow.bounds?

    Что означает ошибка «недостающей темы» в APNS?

    ios Facebook Graph API – запись аудиофайла

    UITableViewCell с UIImage, ширина не обновляется на начальных отображаемых ячейках

    Swift: обнаружение пересечения из набора спрайтов SKShapeNode рисунки

    Просмотры без изменения размера после поворота в пользовательском контейнеровоза

    Когда мне нужно установить свойство contentsScale CALayer?

    Создание статической библиотеки, содержащей библиотеку RestKit

    Использовать UIImagePickerController в ландшафтном режиме в Swift 2.0

    iOS7 TextKit: выравнивание маркеров

    Быстрая метатипическая несогласованность

    Изменение продолжительности анимации UITableView (вставка / удаление строк с таблицей beginUpdates)

    Почему формат png изменяется, когда на устройстве iPhone или iPad

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.