,这是我的第一个视图控制器类:
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"