簡體   English   中英

為什么我不能在Swift中使用從一個UIViewController傳遞到另一個UIViewController的數據來設置標簽(在控制台中打印數據)?

[英]Why I cannot set the labels with the data passed from one UIViewController to another (printing the data in console works) in Swift?

在我的應用程序中,我在容器內有一個嵌入式UIViewController。 在我的故事板上,我向此fullRequestSegue添加了一個觸摸事件,並將其稱為segue: fullRequestSegue

然后,在該UIViewController的代碼中,我寫了:

class RequestDetails: UIViewController, ShowRequestDetailsFromMap {

var fullRequestDetails: FullRequestFromMap?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fullRequestSegue"){
    fullRequestDetails?.changeEventDescr(self.descr, username: "adam", number: "12", created_at: self.created_at, photo: self.photo)

        fullRequestDetails = segue.destinationViewController as? FullRequestFromMap
        fullRequestDetails!.showRequestDetails = self      
    }
}
}

然后在我的類FullRequestFromMap我有:

protocol ShowRequestDetailsFromMap {
    func changeEventDescr(text:String)
}

class FullRequestFromMap: UIViewController{

@IBOutlet weak var userNumber: UILabel!
var showRequestDetails:ShowRequestDetailsFromMap?
override func viewDidLoad() {
    super.viewDidLoad()
}

func changeEventDescr(description: String, username: String, number: String, created_at: NSDate, photo: String) {

    print(username)
    print(description)
    print(number)
    print(created_at)
    print(photo) //that works fine, I see all valid data in the console

    userNumber.text = number //doesn't work, I see empty label instead of filled with passed data, the same problem is with other labels

}

這里有什么問題?

問題是當方法changeEventDescr被調用時, userNumber標簽未初始化。 您正在嘗試分配給一個nil對象。

FullRequestFromMap類中創建一個字符串變量,然后在其中存儲文本,然后在viewDidLoad方法中將文本分配給userNumber標簽。

class FullRequestFromMap: UIViewController {
    @IBOutlet weak var userNumber: UILabel!
    var showRequestDetails:ShowRequestDetailsFromMap?

    var userNumberLabelText:String = "Default Value"

    override func viewDidLoad() {
        super.viewDidLoad()

        userNumber.text = userNumberLabelText
    }

    func changeEventDescr(description: String, username: String, number: String, created_at: NSDate, photo: String) {

        print(username)
        print(description)
        print(number)
        print(created_at)
        print(photo)

        userNumberLabelText = number // Here you set the class variable, not the label it self
    }
}

class RequestDetails: UIViewController {
    ......

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "fullRequestSegue") {
            fullRequestDetails = segue.destinationViewController as? FullRequestFromMap

            // Option 1: You can directly assign it
            fullRequestDetails?.userNumberLabelText = "12"

            // Option 2: You can call your method
            fullRequestDetails?.changeEventDescr(self.descr, username: "adam", number: "12", created_at: self.created_at, photo: self.photo)
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM