1111
1212static void *IDEEditorAreaEditorModeObservingContext = &IDEEditorAreaEditorModeObservingContext;
1313
14+ @interface IDEEditorArea (SCXcodeMinimap_Private)
15+
16+ @property (nonatomic , assign ) BOOL observersInstalled;
17+
18+ @end
19+
1420@implementation IDEEditorArea (SCXcodeMinimap)
1521
1622+ (void )load
@@ -19,26 +25,22 @@ + (void)load
1925 sc_swizzleInstanceMethod ([self class ], @selector (viewWillUninstall ), @selector (sc_viewWillUninstall ));
2026}
2127
22- - (id <IDEEditorAreaMinimapDelegate>)minimapDelegate
23- {
24- return objc_getAssociatedObject (self, @selector (minimapDelegate ));
25- }
26-
27- - (void )setMinimapDelegate : (id <IDEEditorAreaMinimapDelegate>)minimapDelegate
28- {
29- objc_setAssociatedObject (self, @selector (minimapDelegate ), minimapDelegate, OBJC_ASSOCIATION_ASSIGN );
30- }
31-
3228- (void )sc_viewDidInstall
3329{
34- [self addObserver: self forKeyPath: @" editorMode" options: NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context: IDEEditorAreaEditorModeObservingContext];
35-
30+ if (!self.observersInstalled ) {
31+ [self addObserver: self forKeyPath: @" editorMode" options: NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context: IDEEditorAreaEditorModeObservingContext];
32+ [self setObserversInstalled: YES ];
33+ }
34+
3635 [self sc_viewDidInstall ];
3736}
3837
3938- (void )sc_viewWillUninstall
4039{
41- [self removeObserver: self forKeyPath: @" editorMode" ];
40+ if (self.observersInstalled ) {
41+ [self removeObserver: self forKeyPath: @" editorMode" ];
42+ [self setObserversInstalled: NO ];
43+ }
4244
4345 [self sc_viewWillUninstall ];
4446}
@@ -52,4 +54,24 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N
5254 }
5355}
5456
57+ - (BOOL )observersInstalled
58+ {
59+ return [objc_getAssociatedObject (self , @selector (observersInstalled )) boolValue ];
60+ }
61+
62+ - (void )setObserversInstalled : (BOOL )observersInstalled
63+ {
64+ objc_setAssociatedObject (self, @selector (observersInstalled ), @(observersInstalled), OBJC_ASSOCIATION_RETAIN_NONATOMIC );
65+ }
66+
67+ - (id <IDEEditorAreaMinimapDelegate>)minimapDelegate
68+ {
69+ return objc_getAssociatedObject (self, @selector (minimapDelegate ));
70+ }
71+
72+ - (void )setMinimapDelegate : (id <IDEEditorAreaMinimapDelegate>)minimapDelegate
73+ {
74+ objc_setAssociatedObject (self, @selector (minimapDelegate ), minimapDelegate, OBJC_ASSOCIATION_ASSIGN );
75+ }
76+
5577@end
0 commit comments