提问者:小点点

将数据从TabbarController传输到ViewController时为Nil


这里我输出到控制台,一切正常

import UIKit

class MainTabBarViewController: UITabBarController {
    
    var currentUser: MUser = MUser(username: "fdff",
                                   usersurname: "dfdf",
                                   phone: "dffd",
                                   sex: "dfb",
                                   avatarStringURL: "fgf",
                                   id: "gf",
                                   bithDate: "fggf")
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let messageVC = storyboard.instantiateViewController(identifier: "MessageVC") as! MessageVC
        messageVC.currentUser = currentUser
        print("\(currentUser)")
    }

}

但是你看,我把它传递给这个控制器,在这个控制器中,没有问题

import UIKit
import FirebaseFirestore

class MessageVC: UITableViewController {
    
    var chat = [MChat]()
    var currentUser: MUser!
   
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        print(chat[indexPath.row])
        print("\(currentUser)") // return nil
        
        let chatsVC = ChatsViewController(user: currentUser, chat: chat[indexPath.row])
        navigationController?.pushViewController(chatsVC, animated: true)
    }
    
}

有人能解释我做错了什么吗?


共1个答案

匿名用户

解决方案

尝试实例化情节提要中的MessageVC,然后将数据从TabbarController传递给它。

ViewDidLoad外部全局保存MessageVC的引用,并将其用于导航。

示例

class MainTabBarViewController: UITabBarController {
    
    var currentUser: MUser = MUser(username: "fdff",
                                   usersurname: "dfdf",
                                   phone: "dffd",
                                   sex: "dfb",
                                   avatarStringURL: "fgf",
                                   id: "gf",
                                   bithDate: "fggf")
    // Declare Message VC instance
    var messageVC : MessageVC!
    
    override func viewDidLoad() {
        super.viewDidLoad()

       // Instantiate from Storyboard
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        messageVC = storyboard.instantiateViewController(identifier: "VCIdentifier")
        messageVC.currentUser = currentUser
        print("\(currentUser)")
    }

}