Информация о наблюдении KVO теряется, вызывая сбой при удалении наблюдателей

#ios #key-value-observing

#iOS #наблюдение за ключом-значением

Вопрос:

Когда была выпущена iOS 14 beta 5, я начал получать сбой, классический Cannot remove an observer <XYZBinding 0x600000d6b750> for the key path "state" from <XYZEntryChat 0x7f960a77a900> because it is not registered as an observer. .

Однако в базе кода ничего не изменилось, чтобы оправдать это, действительно, код, который давал сбой, не менялся в течение нескольких месяцев. Сбой сохраняется даже в официальной версии iOS 14.

Я исследовал и случайно обнаружил, что observationInfo объект в XYZEntryChat, который должен содержать информацию о зарегистрированных наблюдателях, освобождается после создания без какого-либо вмешательства с нашей стороны.

Также случайно я обнаружил, что при переопределении - (void)setObservationInfo:(void *)observationInfo метода или observationInfo средства получения в классе XYZEntryChat проблема больше не возникает.

Во многих других классах, которые используют тот же базовый код для обработки привязок, проблема не возникает.

У меня больше нет информации о том, почему это происходит, это может быть ошибка iOS 14 или какое-либо изменение поведения в iOS 14, которое выявило неправильный поток использования в приложении. Я также исследовал, связано ли это с взаимодействием Objective-C / Swift, но у других классов, которые также используют / используются Swift, проблемы нет.

Кто-нибудь когда-либо сталкивался с таким поведением или имеет представление о том, что может быть основной причиной?