数据未出现在视图控制器中

时间:2017-01-09 08:09:03

标签: ios swift firebase firebase-realtime-database

我一直在尝试一切,但似乎没有任何效果。我试图将firebase用户信息从一个视图控制器传递到另一个视图控制器,但它永远不会出现。

从表格视图开始 表视图中填充了从我的firebase数据库中提取的用户。当用户选择单元格时,执行以下代码: 我引用函数" showProfileControllerForUser"作为传输所选单元格数据的一种方式

var mainProfile: userProfileNavigator?
override func tableView(_ tableView: UITableView, didSelectRowAt  indexPath: IndexPath) {
    let user1 = self.users[indexPath.row]
self.mainProfile?.showProfileControllerForUser(user3: user1)

    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let vc: UINavigationController =  storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as!  UINavigationController
    self.present(vc, animated: true, completion: nil)
}

在" userProfileNavigator"是以前使用的功能的地方。该函数传递收集的信息并将其传递到最终目的地。

 func showProfileControllerForUser(user3: User){
    mainProfile?.user2 = user3
}

最后," mainProfile"是我想要传递数据的地方。

var user2: User?{
    didSet{
       navigationItem.title = user2?.name
    }

我可以想象这非常混乱,如果需要,我可以提供更多信息或清晰度

试图设置表格如下:

var mainProfile: mainProfile?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let user1 = self.users[indexPath.row]
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: "mainProfile")
    self.mainProfile?.user2 = user1
    self.present(vc, animated: true, completion: nil)
}

正在传递信息的ViewController:

import UIKit
import Firebase

class mainProfile: UIViewController{
@IBOutlet weak var testLabel: UILabel!
        override func viewDidLoad() {
    super.viewDidLoad()
    print("lets see if this is the new user", user2.name as Any)


}
 var user2 = User()

}

但它仍然出现在" nil"

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,那么你有两个ViewControllers。一个包含UITableView,另一个包含ShowProfileControllerForUser

在包含ViewController的{​​{1}}中,代码为:

UITableView

此外,我不确定您是否提出了正确的 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let user1 = self.users[indexPath.row] let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController vc.user3 = user1 self.present(vc, animated: true, completion: nil) }

ViewController

ShowProfileControllerForUser.swift

现在在var user3 = User // declare a variable with proper type.

viewDidLoad()

修改

    override func viewDidLoad() {
      super.viewDidLoad()
      showProfileControllerForUser(user3)
    }

答案 1 :(得分:1)

如果要打开具有该传递值的控制器,可以在实例化后设置该值

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController =  storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as!  UINavigationController

// this is what your showProfileControllerForUser doing
vc.user2 =  user1

self.present(vc, animated: true, completion: nil)