Получение «отменено, пока наблюдатели ключевых значений по-прежнему зарегистрированы с ним». Ошибки после преобразования в 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]; } 
  • UICollection View Flow Layout Вертикальное выравнивание
  • Автоматическая библиотека синтаксического анализа в объекте-c -
  • Получение ширины Центра уведомлений внутри Today-Extension
  • UIPageViewController не соблюдает руководство по верстке в iOS 7
  • Анимация удара сегмента круга заканчивается полным ударом
  • Потребление 2-х точечной аутентификации OAuth (или) Потребительский ключ OAuth webservices с использованием Restkit
  • iOS Xcode, подключающийся к базе данных MySQL
  • Использование незаявленного идентификатора 'kUTTypeMovie'
  • Изменить цвет строки с помощью NSAttributedString?
  • Установить язык по умолчанию при первом запуске IOS
  • Значение UISegmentedControl изменено программно
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.