【问题标题】:Passing values of type User over a segue通过 segue 传递 User 类型的值
【发布时间】:2016-04-06 03:31:44
【问题描述】:

我有一个包含大量用户数据的 User 类。就像联系人应用程序一样,我希望当有人点击联系人时,它会加载联系人卡片。通常我使用 prepareForSegue 和故事板 segue 来传递 String、Int、Array 等的值,但我似乎无法弄清楚如何发送 User 类型的值。在发送端,我已经正确设置了它,但我不知道如何设置接收视图。我想发送整个内容而不是使用点语法并单独抓取每个元素的原因是因为(如联系人应用程序)我希望用户能够向联系人卡片添加字段并且我不想拥有输入我需要传递的所有数据,除非我必须这样做。

用户类别:

class User {
    var firstName = ""
    var lastName = ""
    var email = ""
    var birthday = ""
    var team = ""
    var schedule = ""
    var service = ""
    var position = ""
    var phoneNumber = ""
    var dateStarted = ""
    var profileImgURL = ""
    var notes = ""

    init (firstName:String, lastName:String, email:String, birthday:String, team:String, schedule:String, service:String, position:String, phoneNumber:String, dateStarted:String, profileImgURL:String, notes:String) {
        self.firstName = firstName
        self.lastName = lastName
        self.email = email
        self.birthday = birthday
        self.team = team
        self.schedule = schedule
        self.service = service
        self.position = position
        self.phoneNumber = phoneNumber
        self.dateStarted = dateStarted
        self.profileImgURL = profileImgURL
        self.notes = notes
    }

发件人:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SeeContactCardSegue" {
        if let destVC = segue.destinationViewController as? ContactCardTVC {
            if let indexPath = tableView.indexPathForSelectedRow {
                let user = users[indexPath.row]
                destVC.user = user
            }
        }
    }
}

接收者:

var user:User = ???

我收到一条错误消息,提示用户需要初始化,我在大多数情况下都会遇到这种情况,但我不确定如何初始化它。我错过了什么吗?

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    强制打开它。它应该可以正常工作。

    var user: 用户!

    【讨论】:

    • 发生在每个人身上。 :-)
    【解决方案2】:

    如果您通过模态 segue 显示不同的视图,我感觉您遇到了同样的问题——destinationViewController 是 UINavigationController 而不是您的控制器。第一次在调试器中验证您实际上正在进入if let destVC = segue.destinationViewController as? ContactCardTVC 块并且segue.destinationViewController 确实是ContactCardTVC

    如果我的假设是正确的,即您的 destinationViewController 是 UINavigationController,那么您的代码应该如下所示:

        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)     {
        if segue.identifier == "SeeContactCardSegue" {
            let nav = segue.destinationViewController as! UINavigationController
            let cardContactVC = nav.topViewController as! ContactCardTVC   
                if let indexPath = tableView.indexPathForSelectedRow {
                    let user = users[indexPath.row]
                    cardContactVC.user = user
                }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 2018-03-11
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      相关资源
      最近更新 更多