运行时在 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 类的主要内容,如果未能解决你的问题,请参考以下文章
我无法向 segues 添加标识符。有没有办法修复 ios xamarin 故事板?