首页 > 解决方案 > 从containverView错误中快速传递数据

问题描述

Heloo,当我将 contaienerView 与静态 tableview 一起使用时,我遇到了这个问题。我想将我的数据从我的主视图控制器传递到我的表格视图,并且我在它说我的数据为空的地方有这个中断,但它不是空的,因为我已经填充了我想要传递的数据。我使用 firebase 和字典. 这是我的代码:

我的主控制器:

class MainController: UITableViewController, AddPatientController {

private var patientLists = [PatientList]() // empty array buat isi list yg isinya nama pasien
var Segue : String = "PatientName"
var Segue2 : String = "PatientNotes"
let user : User = Auth.auth().currentUser! 
private var rootRef : DatabaseReference!

override func viewDidLoad() {
    super.viewDidLoad()

    self.rootRef = Database.database().reference() 
    populateList()
}

private func populateList() {// 5. func buat fetch data dari db ke hp



    self.rootRef.child(self.user.emailWithoutSpecialChar).observe(.value) { (snapshot) in 

        self.patientLists.removeAll()

        let pasienListDict = snapshot.value as? [String:Any]  ?? [:] //7. ini berarti return buat kl dict nya kosong, ini buat akses ke valuenya yg isinya itu dict[String:Any]

        for (key,_) in pasienListDict {

            if let pasienlistdict = pasienListDict[key] as? [String:Any]{


                if let pasienlist = PatientList(pasienlistdict) {
                    self.patientLists.append(pasienlist)
                    // ini buat ngemasukin ke dalem dictionarynya, ini buat store datanya dan ngambil datanya dari firebase db
                }

            }
        }

        DispatchQueue.main.async {
            self.tableView.reloadData()
        }

    }

} override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == Segue {
        let nc = segue.destination as! UINavigationController
        let addPatientName = nc.viewControllers.first as! AddListController
        addPatientName.delegate = self

        }

        else if segue.identifier == Segue2 {

        guard let indexPath = self.tableView.indexPathForSelectedRow else {return}

        let nc = segue.destination as! PasienProfileController
        nc.pasien = self.patientLists[indexPath.row] 
    }

}

这是我应该接收数据的控制器

class NotesController: UITableViewController, AddNotesDelegate {


var pasien : PatientList!
private var rootRef : DatabaseReference! 



var Segue1 : String = "AddNotes"
var Segue2 : String = "PasienNotes"

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = pasien.name // this is the line where my code break cause it says the data is null

    self.rootRef = Database.database().reference()

}

我的 pasienprofilecontroller 和我的 pasienProfileTableController(containverView 之一):

class PasienTableController: UITableViewController {



@IBOutlet weak var dataKunjunganLbl: UILabel!
@IBOutlet weak var diagnosaPasienLbl: UILabel!
@IBOutlet weak var alergiPasienLbl: UILabel!

var delegete : PasienTableControllerDelegate?

var patientList = [PatientList]()


override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self


}

class PasienProfileController: UIViewController {

@IBOutlet weak var TinggiLbl: UILabel!
@IBOutlet weak var beratLbl: UILabel!
@IBOutlet weak var GolDarahLbl: UILabel!
@IBOutlet weak var NamaLbl: UILabel!

@IBOutlet weak var ImagePic: UIImageView!

var pasien : PatientList!

@IBOutlet weak var ContainerView: UIView!


override func viewDidLoad() {
    super.viewDidLoad()

    self.ImagePic.makeRounded()
    self.NamaLbl.text = pasien.name

}

这是我的故事板的图像,可以清楚地了解我想要做什么

所以我的

所以我的“病人”视图控制器是我的主控制器,之后它将显示配置文件 pasien 控制器,它是带有包含静态 tableview 的容器视图的 uiview。当我尝试点击“Data Kunjungan Pasien”单元时,它会出现错误

那么我的逻辑有问题吗?为什么它一直说空,而它可以成功地将数据从 Patient 视图显示到 PatientProfileView?

*如果你们想克隆并检查我的错误,这是我的 git https://gitlab.com/afipermanaa/skripsi.git

谢谢您的帮助

标签: swiftfirebasefirebase-realtime-databasetableview

解决方案


如果您想使用此代码从 prepareForSegue 传递数据,我不明白

    else if segue.identifier == Segue2 {

    guard let indexPath = self.tableView.indexPathForSelectedRow else {return}

    let nc = segue.destination as! PasienProfileController
    nc.pasien = self.patientLists[indexPath.row] 
}

到 NotesController 为什么将 "nc" 转换为 PasienProfileController ?它不是同一类

我看不到您在哪里设置了 pasien 值。

希望对你有帮助,如果不是请解释


推荐阅读