gpt4 book ai didi

firebase - removeAllObservers 观察者未删除

转载 作者:行者123 更新时间:2023-12-03 06:27:46 25 4
gpt4 key购买 nike

删除观察者时遇到问题;即使在removeAllObservers之后该事件似乎也会触发

这是数据结构

listOfItems
Item 1
Key:Value
Item 2
Key:Value

最初,listOfItems 正在被观察

[refToListOfItems observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"responding to value change in the list of items");
}];

但在某些时候,我想在不被观察的情况下更新 Item 1 Key:Value 对,因此我从 Item 1 中删除了观察者

[refToItem1 删除所有观察者];

然后继续更新第1项的字典

NSDictionary *testData = @{
@"newKey": @"newValue"
};

[refToItem1 updateChildValues:testData];

但是 refToItem1 元素仍然会触发观察者事件。

我错过了什么?

编辑看来只有在该对象上隐式设置时才能删除对对象的观察。即,如果您对某个对象设置观察,则可以删除该观察。但它不能在第一个被观察对象的子对象上删除?

最佳答案

如果我理解正确的话,我自己也遇到过这个问题。在 iVar 中存储 refToItem1 不起作用,因为它每次在循环中都会被覆盖。

我的解决方案是将子 Firebase 引用存储在一个数组中,然后在我想要删除所有观察者时循环遍历该数组。

例如

self.parentRef = [[Firebase alloc] initWithUrl:@"url"];

NSMutableArray *childObservers = [[NSMutableArray alloc] init];

[self.parentRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
Firebase *childRef = [ref childByAppendingPath...];

[childObservers addObject:childRef];

[ref observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *childSnapshot) {
... observations
}];
}];

然后删除观察者:

- (void)stopObserving { 
[self.parentRef removeAllObservers];

for (Firebase *ref in self.childObservers) {
[ref removeAllObservers];
}
}

关于firebase - removeAllObservers 观察者未删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com