gpt4 book ai didi

ios - Firebase 移除观察者

转载 作者:IT王子 更新时间:2023-10-29 05:53:07 27 4
gpt4 key购买 nike

我在删除代码中的 Firebase 观察器时遇到问题。这是结构的分割:

var ref = Firebase(url:"https://MY-APP.firebaseio.com/")
var handle = UInt?

override func viewDidLoad() {
handle = ref.observeEventType(.ChildChanged, withBlock: {
snapshot in

//Do something with the data
}
}

override func viewWillDisappear(animated: Bool) {
if handle != nil {
println("Removed the handle")
ref.removeObserverWithHandle(handle!)
}
}

现在当我离开 viewcontroller 时,我看到打印了“Removed the handle”,但是当我返回 viewcontroller 时,每个事件都会调用我的观察者两次。离开再回来,叫三声。等等 为什么观察者没有被移除?

我也在代码后面调用了 ref.setValue("some value"),这与它有什么关系吗?

最佳答案

以为我遇到了这个错误,但实际上我试图删除错误引用的观察者。

原始代码:

let ref: FIRDatabaseReference = FIRDatabase.database().reference()
var childAddedHandles: [String:FIRDatabaseHandle] = [:]

func observeFeedbackForUser(userId: String) {
if childAddedHandles[userId] == nil { // Check if observer already exists

// NOTE: - Error is caused because I add .child(userId) to my reference and
// do not when I call to remove the observer.

childAddedHandles[userId] = ref.child(userId).observeEventType(.ChildAdded) {
[weak self] (snapshot: FIRDataSnapshot) in

if let post = snapshot.value as? [String:AnyObject],
let likes = post["likes"] as? Int where likes > 0 {

self?.receivedFeedback(snapshot.key, forUserId: userId)
}
}
}
}

func stopObservingUser(userId: String) {
// THIS DOES NOT WORK

guard let cah = childAddedHandles.removeValueForKey(userId) else {
print("Not observing user")
return
}

// Error! I did not add .child(userId) to my reference
ref.removeObserverWithHandle(cah)
}

固定代码:

func stopObservingUser(userId: String) {
// THIS WORKS

guard let cah = childAddedHandles.removeValueForKey(userId) else {
print("Not observing user")
return
}

// Add .child(userId) here
ref.child(userId).removeObserverWithHandle(cah)
}

关于ios - Firebase 移除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27124118/

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