Firebase观察者架构

时间:2018-04-06 18:48:32

标签: ios swift firebase firebase-realtime-database swift4

好的,所以我正在尝试构建一个依赖Firebase的iOS应用程序(使用它的Android版本)

我开始为我的应用程序中的每个actor创建一个存储库,并开始使用一般存储库来管理它们

enter image description here

每个存储库管理此actor的观察者。一个例子:

在PagesRepository中,这是一个从Firebase检索所有页面并在completionHandler中返回的函数:

//MARK: Gets the whole pages list
func getPagesList(completionHandler: @escaping (_ pages: [Page]?, _ error: NSError?) -> Void) {

    func displayError(error: String) {
        print(error)
        completionHandler(nil, self.getErrorFromString(error))
    }

    pagesRef.observe(DataEventType.value) { pagesSnapshot in

        guard pagesSnapshot.exists() else {
            displayError(error: "Pages snapshot doesn't exist")
            return
        }

        var pagesList = [Page]()
        for pageSnapshot in pagesSnapshot.children {
            pagesList.append(Page(snapshot: pageSnapshot as! DataSnapshot))
        }
        completionHandler(pagesList, nil)
    }
}

然后我从ViewController中调用它:

repository.getPagesList { (pages, error) in
        guard error == nil else {
            return
        }

        //Do processing
    }

我知道这可能需要考虑很多,但我的问题是,每次调用函数时,它都会创建一个新的观察者,但不会取消旧观察者...所以,completionHandler是多次调用不同的值

我该如何处理这个问题? (抱歉复杂,有点不清楚,我真的迷路了)

1 个答案:

答案 0 :(得分:0)

似乎你只想观察一次这样的值,所以我会用它代替:

Apr  6 20:39:20 Hl-Server sshd[5107]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=110.86.23.82
Apr  6 20:39:21 Hl-Server sshd[5107]: Failed password for invalid user applmgr from 110.86.23.82 port 1121 ssh2
Apr  6 20:39:22 Hl-Server sshd[5107]: Received disconnect from 110.86.23.82 port 1121:11: Normal Shutdown, Thank you for playing [preauth]
Apr  6 20:39:22 Hl-Server sshd[5107]: Disconnected from 110.86.23.82 port 1121 [preauth]
Apr  6 20:45:01 Hl-Server CRON[5110]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr  6 20:45:01 Hl-Server CRON[5110]: pam_unix(cron:session): session closed for user root
Apr  6 20:46:05 Hl-Server sshd[5113]: Invalid user wp-user from 221.229.166.102