简体   繁体   English

领域数据已保存到数据库,但未在Swift 4中填充标签

[英]Realm data is saved to database but is not populating labels in Swift 4

I am making an app that uses Realm to persist data, and I have run into a small bug and cant seem to figure it out. 我正在制作一个使用Realm保留数据的应用程序,但遇到了一个小错误,似乎无法弄清楚。 I know it has to be something simple that I am overlooking, as I have a couple other View Controllers that use very similar code and they work. 我知道它一定是我所忽略的简单事物,因为我还有其他两个使用非常相似的代码且可以正常工作的View Controller。 so here it is. 就是这样

I have a View Controller that has inputs for information and it works fine sends the data to Realm. 我有一个View Controller,它具有信息输入,并且工作正常,可以将数据发送到Realm。 On a different View Controller I have code to display that data in labels but it does not display the information on the labels they are blank in fact even the default text does not show on the screen? 在另一个View Controller上,我有代码可以在标签中显示该数据,但是它不会在标签上显示信息,而实际上它们是空白的,即使默认文本不在屏幕上显示? Help!!! 救命!!!

Here is the code for the display VC. 这是显示VC的代码。

import UIKit
import RealmSwift

class CompanyViewController: UIViewController {

    var myCompany: Results<CompanyInfo>?

    let realm = try! Realm()

    var selectedCompany: CompanyInfo? {
        didSet { }
    }

    override func viewWillAppear(_ animated: Bool) {
        loadCompany()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        nameLabel?.text = selectedCompany?.companyName
        addressLabel.text = selectedCompany?.companyAddress
        cityLabel.text = selectedCompany?.companyCity
        stateLabel.text = selectedCompany?.companyState
        postalLabel.text = selectedCompany?.companyPostalCode
        phoneLabel.text = selectedCompany?.companyPhoneNumber
        emailLabel.text = selectedCompany?.companyEmail
    }

    func loadCompany(){
        myCompany = realm.objects(CompanyInfo.self)
    }

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var addressLabel: UILabel!
    @IBOutlet weak var cityLabel: UILabel!
    @IBOutlet weak var stateLabel: UILabel!
    @IBOutlet weak var postalLabel: UILabel!
    @IBOutlet weak var phoneLabel: UILabel!
    @IBOutlet weak var emailLabel: UILabel!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "AddCompanySegue" {
            guard segue.destination is UINavigationController else { return }
        }
    }
}

You should call loadCompany method before set the labels text values, something like this 您应该在设置标签文本值之前调用loadCompany方法,如下所示

override func viewDidLoad() {
        super.viewDidLoad()
        //first load the company
        self.loadCompany()

        nameLabel?.text = selectedCompany?.companyName
        addressLabel.text = selectedCompany?.companyAddress
        cityLabel.text = selectedCompany?.companyCity
        stateLabel.text = selectedCompany?.companyState
        postalLabel.text = selectedCompany?.companyPostalCode
        phoneLabel.text = selectedCompany?.companyPhoneNumber
        emailLabel.text = selectedCompany?.companyEmail
    }

other issue is what is selectedCompany? 另一个问题是选择了什么公司? assuming that is the first result of your realm query, your loadCompany method should be something like this 假设这是您的realm查询的第一个结果,则loadCompany方法应类似于以下内容

  func loadCompany(){
        myCompany = realm.objects(CompanyInfo.self)
        if(myCompany.count > 0){
        //Asigning value to "selectedCompany" variable
        self.selectedCompany = myCompany[0]
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM