Module: BubbleWrap::KVO
- Defined in:
- motion/core/kvo.rb
Defined Under Namespace
Classes: Registry
Constant Summary collapse
- DEFAULT_OPTIONS =
NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
- IMMIDEATE_OPTIONS =
NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial
Instance Method Summary collapse
- #observe(target = self, key_paths, &block) ⇒ Object
- #observe!(target = self, key_paths, &block) ⇒ Object
- #unobserve(target = self, key_paths) ⇒ Object
- #unobserve!(target = self, key_paths) ⇒ Object
- #unobserve_all ⇒ Object
Instance Method Details
#observe(target = self, key_paths, &block) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'motion/core/kvo.rb', line 103 def observe(target = self, key_paths, &block) key_paths = [key_paths].flatten key_paths.each do |key_path| if not observers_registry.registered?(target, key_path) target.addObserver(observers_registry, forKeyPath:key_path, options:DEFAULT_OPTIONS, context:nil) end # Add block even if observer is registed, so multiplie blocks can be invoked. observers_registry.add(target, key_path, &block) end end |
#observe!(target = self, key_paths, &block) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'motion/core/kvo.rb', line 116 def observe!(target = self, key_paths, &block) key_paths = [key_paths].flatten key_paths.each do |key_path| registered = immediate_observers_registry.registered?(target, key_path) immediate_observers_registry.add(target, key_path, &block) # We need to first register the block, and then call addObserver, because # observeValueForKeyPath will fire immedeately. if not registered target.addObserver(immediate_observers_registry, forKeyPath:key_path, options: IMMIDEATE_OPTIONS, context:nil) end end end |
#unobserve(target = self, key_paths) ⇒ Object
132 133 134 |
# File 'motion/core/kvo.rb', line 132 def unobserve(target = self, key_paths) remove_from_registry_if_exists(target, key_paths, observers_registry) end |
#unobserve!(target = self, key_paths) ⇒ Object
136 137 138 |
# File 'motion/core/kvo.rb', line 136 def unobserve!(target = self, key_paths) remove_from_registry_if_exists(target, key_paths, immediate_observers_registry) end |
#unobserve_all ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'motion/core/kvo.rb', line 140 def unobserve_all observers_registry.each_key_path do |target, key_path| target.removeObserver(observers_registry, forKeyPath:key_path) end immediate_observers_registry.each_key_path do |target, key_path| target.removeObserver(immediate_observers_registry, forKeyPath:key_path) end observers_registry.remove_all immediate_observers_registry.remove_all end |