Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📜 Description
Remove KVO when keyboard disappears.
💡 Motivation and Context
It seems like we can not attach a single listener to the keyboard when it appeared for the first time. iOS may throw
KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED
, which means, that the memory for the listener was released and thus a handler is corrupted (KVO was released while still observing the key path).To overcome the problem I've decided to remove observation when keyboard becomes hidden. To detect the moment when keyboard got hidden I used
UIWindow.didBecomeHiddenNotification
(since for attaching a KVO listener I've usedUIWindow.didBecomeVisibleNotification
- the motivation behind "why I've used these lifecycles" is the fact, that these lifecycle methods will be triggered only one time when keyboard appears/disappears, unlike other methods, which can be called several times).Also I've added a local variable called
hasKVObserver
and two helper functions:setupKVObserver
;removeKVObserver
.These functions control the value of
hasKVObserver
and assure that we will not call.removeObserver
if listener is not attached (such situation will cause a crash and usinghasKVObserver
value we avoid it).Fixes #143
📢 Changelog
iOS
UIWindow.didBecomeVisibleNotification
listener;UIWindow.didBecomeVisibleNotification
is emitted and KVO is present;🤔 How Has This Been Tested?
Tested on:
📝 Checklist