ios - Firebase 移除观察者

标签 ios swift firebase

我在删除代码中的 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/

相关文章:

ios - 无法将 ViewSecond 类型的值分配给 ViewFirst

objective-c - UITableView 处于编辑模式时可选择的 UITableViewCells

ios - 3D Touch 功能检查问题 - Swift

swift - 快速链接发布者并接收每个结果

php - mysql数据库中的Swift数组

android - getContactsFromFirebase() 方法返回一个空列表

iOS Swift 本地通知不是 "popping up"

ios - 找不到接口(interface)声明和尝试使用转发类错误

javascript - 异步读取数据库返回集合

performance - Firestore 聊天应用 : Is this a valid document structure for multi-recipient messages?