在UITabBarController内的视图控制器之间传递数据而不使用segues

时间:2017-02-08 09:19:22

标签: ios arrays swift uitabbarcontroller

我一直在寻找这个问题的答案。如果我使用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.
}

1 个答案:

答案 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
}