@@ -32,6 +32,12 @@ @interface FirebaseIndexArray () <FirebaseArrayDelegate>
32
32
33
33
@end
34
34
35
+ /* *
36
+ * FirebaseIndexArray manages an instance of FirebaseArray internally to
37
+ * keep track of which queries it should be updating. The FirebaseArrayDelegate
38
+ * methods are responsible for keeping observers up-to-date as the contents of
39
+ * the FirebaseArray change.
40
+ */
35
41
@implementation FirebaseIndexArray
36
42
37
43
- (instancetype )init {
@@ -101,12 +107,6 @@ - (void)dealloc {
101
107
102
108
#pragma mark - FirebaseArrayDelegate
103
109
104
- // These delegate methods are entirely responsible
105
- // for keeping a local array of queries up to date.
106
- // Like mapping a FirebaseArray's contents, except
107
- // they must be kept up to date as the FirebaseArray
108
- // changes over time.
109
-
110
110
- (void )observer : (FirebaseQueryObserver *)obs
111
111
didFinishLoadWithSnap : (FIRDataSnapshot *)snap
112
112
error : (NSError *)error {
@@ -130,11 +130,12 @@ - (void)array:(FirebaseArray *)array
130
130
atIndex : (NSUInteger )index {
131
131
NSParameterAssert ([object.key isKindOfClass: [NSString class ]]);
132
132
id <FIRDataObservable> query = [self .data child: object.key];
133
+ __weak typeof (self) wSelf = self;
133
134
FirebaseQueryObserver *obs = [FirebaseQueryObserver observerForQuery: query
134
135
completion: ^(FirebaseQueryObserver *observer,
135
136
FIRDataSnapshot *snap,
136
137
NSError *error) {
137
- [self observer: observer didFinishLoadWithSnap: snap error: error];
138
+ [wSelf observer: observer didFinishLoadWithSnap: snap error: error];
138
139
}];
139
140
[self .observers insertObject: obs atIndex: index];
140
141
@@ -167,12 +168,13 @@ - (void)array:(FirebaseArray *)array
167
168
[self .observers[index] removeAllObservers ];
168
169
169
170
// Add new observer
171
+ __weak typeof (self) wSelf = self;
170
172
id <FIRDataObservable> query = [self .data child: object.key];
171
173
FirebaseQueryObserver *obs = [FirebaseQueryObserver observerForQuery: query
172
174
completion: ^(FirebaseQueryObserver *observer,
173
175
FIRDataSnapshot *snap,
174
176
NSError *error) {
175
- [self observer: observer didFinishLoadWithSnap: snap error: error];
177
+ [wSelf observer: observer didFinishLoadWithSnap: snap error: error];
176
178
}];
177
179
[self .observers replaceObjectAtIndex: index withObject: obs];
178
180
0 commit comments