我一直在寻找这个问题的答案。如果我使用segues,我可以使用prepareforSegue
。众所周知,UITabBar
没有像导航控制器这样的细分。在我的一个视图控制器中,我从firebase获取数据,并且我设置了观察者来监听任何更改。我想使用从此控制器中的firebase获取的数据来访问另一个视图控制器。例如,我想在另一个视图控制器中访问此entryIDs
,并且还要监听对此数组所做的任何更改,因此我可以在我的collectionView中重新加载数据。总结一下,如何在UITabBarController中从一个视图控制器访问数组到另一个视图控制器,并且还要监听对它做出的任何更改?
var entries = [String: DiaryEntry]()
var entryIDs = [String]()
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
override func viewDidLoad() {
super.viewDidLoad()
// Register cell classes
self.collectionView!.register(DiaryCell.self, forCellWithReuseIdentifier: "homeCell")
collectionView?.backgroundColor = UIColor.white
if let userID = FIRAuth.auth()?.currentUser?.uid {
FirebaseService.service.getUserEntriesRef(uid: userID).observe(.value, with: { [weak weakSelf = self] (snapshot) in
weakSelf?.entries = [String: DiaryEntry]()
weakSelf?.entryIDs = [String]()
let enumerator = snapshot.children
while let entry = enumerator.nextObject() as? FIRDataSnapshot {
weakSelf?.entryIDs.append(entry.key)
weakSelf?.entries[entry.key] = DiaryEntry(snapshot: entry)
}
weakSelf?.entryIDs.reverse()
weakSelf?.collectionView?.reloadData()
})
}
// Do any additional setup after loading the view.
}
答案 0 :(得分:0)
发送信息
let infoDict = ["info" : self.info]
NotificationCenter.default.post(name: Notification.Name(rawValue: "passInfo"), object: nil, userInfo : infoDict as! [String : AnyObject])
收到信息
NotificationCenter.default.addObserver(self, selector: #selector(self.doSomething), name: NSNotification.Name(rawValue: "passInfo"), object: nil)
func doSomething(_ notification : Notification) {
let info = notification.userInfo!["info"] as! Int
//Do something
}