在 segue 中添加数据在运行时无法识别 SecondViewController 类



,这是我的第一个视图控制器类:

import UIKit
class AboutUsTableViewController: UITableViewController {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let volunteerPageVC = segue.destination as! DedicatedVolunteerViewController
        // Idk why I have to use 'as!' instead of 'as'. Xcode made me do it
        volunteerPageVC.person = "John Smith"
    }
}

这是我的第二视图控制器类:

import IUKit
class DedicatedVolunteerViewController: UIViewController {
    var person: String?
    @IBOutlet weak var HeaderTitle: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        HeaderTitle.text = "About " + person!;
    }
}

在我的主故事板上, AboutUsTableView segue上的每个单元格到 DedicatedVolunteerViewController。我想能够拥有一个可以多次使用的视图控制器(即人们的配置文件)。

当我单击表视图中的任何单元格时,我会得到以下错误:

2016-12-26 11:44:27.075 MyApp iOS[8350:493673] Unknown class _TtC20MyApp_iOS31DedicateVolunteerViewController in Interface Builder file.
2016-12-26 11:44:29.698 MyApp iOS[8350:493673] Unknown class _TtC20MyApp_iOS31DedicateVolunteerViewController in Interface Builder file.

我很困惑,因为当我编译该应用程序时,就不会出现关于"未知类"的错误,或者说我需要在AboutUsTableViewController中添加/导入DedicatedVolunteerViewController才能使用它。我什至试图导入它,但是Xcode不会让我给我错误。

P.S。考虑到大多数在线上的地方,我很麻烦地提供有关Swift或OBJ-C的旧版本的文档,这使得很难找到如何使用新版本的代码。

这听起来像是您的故事板场景中的班级名称是错误的。请从表视图控制器到第二视图控制器关注SEGUE(S)。然后选择目标视图控制器的场景,选择视图控制器本身,然后选择"标识检查员"。检查目标视图控制器的类。从您遇到的错误中,听起来像是类是_TtC20MyApp_iOS31DedicateVolunteerViewController而不是DedicateVolunteerViewController

swift使用'optionals',这本质上是无效的对象。选项可以具有有效的值或零。建议您使用"警卫"语句处理选项。

所以,您的Preparforsegue应该看起来像:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let volunteerPageVC = segue.destination as? DedicatedVolunteerViewController else {
        //Handle the nil value, log, etc
        return
    }
    volunteerPageVC.person = "John Smith"
}

!明确解开可选设备 - 意味着它必须具有一个值,否则该应用将崩溃。您应该在可能的情况下避免使用它们并使用?正如我在上面展示的那样,而是用守卫声明。在上面的代码中,它试图将segue.destination施加到专用VolunteerviewController中,但如果不能,它将属于Guard语句(这意味着结果为NIL)。

苹果网站上有很多有关选项的好信息。查看:Swift Basics

至于您的特定错误,它看起来像是一个简单的错误拼写。该错误是指" DedicateVolunteerviewController'(缺少'd'),您的类名称为" DedicatedVolunteerviewController"

最新更新