ios - swift 3 : prepare(for:sender:)

标签 ios swift core-data

<分区>

我有一个简单的实体:

extension Team {

@nonobjc public class func fetchRequest() -> NSFetchRequest<Team> {
    return NSFetchRequest<Team>(entityName: "Team")
}

@NSManaged public var name: String?
@NSManaged public var phone: String?
@NSManaged public var department: String?
@NSManaged public var position: String?

}

图片方便理解:

enter image description here

我成功地将当前实体从 Core Data 加载到 App。此外,我有一个带有属性 members 的 UITableViewController(它是从 Team 实体获取结果的存储)。

var members: [Team] = []

应用启动后 (viewDidLoad(_:)) members.count 等于 7,这是正确的。此外,所有这些成员元素都由 UITableViewController 中的 UITableVIew 使用。

我的任务是打开详细 View Controller ,它将从点击的单元格中检索数据。对于这个委托(delegate),我在 UITableViewController 中使用经典的 prepare(for:sender:) 方法(在当前情况下谁是 segue.source):

// MARK: - Navigation

extension TeamListViewController {

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == segueIdentifier,
        let memberDetailsViewController = segue.destination as? MemberDetailsViewController else {
        fatalError("Wrong destination!")
    }

    guard let selectedIndex = tableView.indexPathForSelectedRow?.row else {
        fatalError("Out of range")
    }

    guard let name       = members[selectedIndex].name,
          let phone      = members[selectedIndex].phone,
          let department = members[selectedIndex].department,
          let position   = members[selectedIndex].position else {

        fatalError("No correct data")
    }

    memberDetailsViewController.memberNameLabel.text!        = name
    memberDetailsViewController.memberPhoneNumberLabel.text! = phone
    memberDetailsViewController.memberDepartmentLabel.text!  = department
    memberDetailsViewController.memberPositionLabel.text!    = position

}

}

因此,应用程序启动,我点击任何我想打开的单元格以获取更多详细信息,然后......应用程序崩溃了!

fatal error: unexpectedly found nil while unwrapping an Optional value

enter image description here

但是,我的变量(姓名、电话、部门、职位)没问题。他们有值(value)观!

哦,是的。我尝试在下面的 MemberDetailsViewController 中检索 UILabels 的数据:

// MARK: - IBOutlets
@IBOutlet weak var memberNameLabel:        UILabel!
@IBOutlet weak var memberPhoneNumberLabel: UILabel!
@IBOutlet weak var memberDepartmentLabel:  UILabel!
@IBOutlet weak var memberPositionLabel:    UILabel!

这里有什么问题?

最佳答案

因为你在 prepare(for segue: UIStoryboardSegue, sender: Any?) 方法中设置你的数据 TeamListViewController 其中 MemberDetailsViewController 是没有正确加载这就是你得到 nil 的方式。

我的建议是:在 MemberDetailsViewController 中添加像 var members: Team? 这样的对象,然后从 TeamListViewController 传递它,这样就不会出现错误。

关于ios - swift 3 : prepare(for:sender:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854085/

相关文章:

iphone - 核心数据集FetchBatchSize

ios - 如何以编程方式从 UIViewController 转到 UITableViewController

ios - SwiftUI - 错误 - 类型的值没有成员

objective-c - MPMoviePlayerController 不加载滚动库中的第一个视频

ios - 类型 'UIButton' 的值没有成员 'reactive'

ios - scrollToRowAtIndexPath 在 iOS 8 上无法正确滚动到底部

ios - didRangeBeacon 在没有找到任何信标的情况下被调用

ios - UIImageView 带有像 Facebook Messenger 一样的 subview

ios - NSManagedObject 作为 MKAnnotation 和核心数据并发

mysql - 我应该在数据库中创建与第二级子级的关系,什么是最佳的?