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

Posted

技术标签:

【中文标题】运行时在 segue 中添加数据将无法识别 SecondViewController 类【英文标题】:Add data in segue won't recognize SecondViewController class when running 【发布时间】:2016-12-26 19:01:54 【问题描述】:

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

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 上的每个单元格都与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.

我很困惑,因为当我编译应用程序时,它没有给出关于“未知类”的错误,或者说我需要将DedicatedVolunteerViewController 添加/导入到AboutUsTableViewController 才能使用它。我什至尝试导入它,但 Xcode 不让我这样做并不断给我错误。

附:考虑到大多数在线地方都提供有关旧版本 swift 或 obj-c 的文档,这让我很难找到如何使用新版本的代码,我遇到了很多麻烦。

【问题讨论】:

【参考方案1】:

听起来你的故事板场景中的类名是错误的。从您的表视图控制器转到您的第二个视图控制器。然后选择目标视图控制器的场景,选择视图控制器本身,并选择“识别检查器”。检查目标视图控制器的类。根据您收到的错误,听起来它的类是 _TtC20MyApp_iOS31DedicateVolunteerViewController 而不是 DedicateVolunteerViewController

【讨论】:

【参考方案2】:

Swift 使用“可选”,它本质上意味着一个可以为空的对象。可选项可以有一个有效值或 nil。建议您使用 'guard' 语句来处理可选项。

因此,您的 prepareForSegue 应该如下所示:

    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 转换为 DedicatedVolunteerViewController,但如果不能,它将落入保护语句(意味着结果为 nil)。

Apple 网站上有很多关于可选选项的好信息。签出:Swift Basics

至于您的具体错误,它看起来像是一个简单的拼写错误。错误是指“DedicateVolunteerViewController”(缺少“d”),您的班级名称是“DedicatedVolunteerViewController”

【讨论】:

以上是关于运行时在 segue 中添加数据将无法识别 SecondViewController 类的主要内容,如果未能解决你的问题,请参考以下文章

将 segue 添加到拆分视图控制器

将 segue 添加到动态创建的单元格

人工触发 Segue

我无法向 segues 添加标识符。有没有办法修复 ios xamarin 故事板?

如何在运行时在 spring-SAML 中添加新的 idp 元数据

如何使用 VBA 将事件添加到运行时在 Excel 中创建的控件