0
我正在使用哪个数据库火力点,在这个时候我试图使用这段代码从我读的基础数据异步一个项目:麻烦异步任务
let myGroup = DispatchGroup()
let ref1 = FIRDatabase.database().reference().child("chats")
let curUserUid = (FIRAuth.auth()?.currentUser?.uid)!
myGroup.enter()
ref1.observe(FIRDataEventType.value, with: { (snapshot) in
if snapshot.hasChildren() {
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
for elem in postDict {
let valuesDict = elem.value as? [String : AnyObject] ?? [:]
for kv in valuesDict {
if kv.key == "name" && kv.value.contains(curUserUid) {
MainUsersList.currentChats.append(elem.key)
print(elem.key)
}
}
}
}
myGroup.leave()
})
myGroup.notify(queue: .main, execute: {
//self.loadLastMsgs()
self.ShowVC()
})
而且ShowVC方法:
let st = UIStoryboard(name:"Main", bundle: nil)
let anotherVC = st.instantiateViewController(withIdentifier: "messagesVC")
self.present(anotherVC, animated: true, completion: nil)
print("showVC")
而在另一个VC我有这样的代码在viewDidLoad中:
print("!!!!!!!")
print(MainUsersList.currentChats.count)
当我执行一个按钮,磨片重码第一块写的是我得到这个控制台:
!!!!!!!
y2MTmBq8o0QF9yxcSBCOpI1DZku2-DnYqmHW2umWaWN54buhtGrXEToW2 //elem.key
showVC
!!!!!!!
所以,我的问题是,为什么ShowVC异步任务执行前结束,以及为什么它执行两次(我没有其他代码打印(!!!!!!!))?提前致谢! P.S.我没有self.ShowVC()代码写在其他地方肯定
了解如何异步任务的工作。在你的情况下,该组根本不需要。只需将'myGroup.leave()'替换为'self.ShowVC()'并删除所有其他与DispatchGroup相关的代码即可。 *不要问,告诉!* – vadian
不幸的是,结果是一样的 – Burning