好的,所以我正在尝试构建一个依赖Firebase的iOS应用程序(使用它的Android版本)
我开始为我的应用程序中的每个actor创建一个存储库,并开始使用一般存储库来管理它们
每个存储库管理此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是多次调用不同的值
我该如何处理这个问题? (抱歉复杂,有点不清楚,我真的迷路了)
答案 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