【发布时间】:2018-04-22 07:26:53
【问题描述】:
我正在尝试将我制作的故事板连接到我的聊天应用程序中的视图控制器文件。
我所做的是……
1) 创建一个视图控制器文件(swift)。
2) 创建故事板文件并将视图控制器类设置为自定义类。
3) 将故事板中的组件(表格视图)连接到视图控制器作为插座。
现在,我收到“线程 1:致命错误:在展开可选值时意外发现 nil”错误消息。
代码如下。
import UIKit
class ChatViewController: UIViewController {
var _device_width: Int = 0
var _device_height: Int = 0
var _footer_size: Int = 0
var _backBtn: UIBarButtonItem!
var window: UIWindow?
var _toolBar: UIToolbar!
var bottomView: ChatRoomInputView!
var chats: [ChatEntity] = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
showNavigateBar()
setupUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
override var canBecomeFirstResponder: Bool {
return true
}
override var inputAccessoryView: UIView? {
return bottomView
}
func showNavigateBar() {
let backButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButtonItem
self.title = 'My App'
}
}
extension ChatViewController {
func setupUI() {
self.view.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1)
// ERROR happen on this line.
// "Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
tableView.separatorColor = UIColor.clear
tableView.estimatedRowHeight = 10000
tableView.rowHeight = UITableViewAutomaticDimension
tableView.allowsSelection = false
tableView.keyboardDismissMode = .interactive
tableView.register(UINib(nibName: "YourChatViewCell", bundle: nil), forCellReuseIdentifier: "YourChat")
tableView.register(UINib(nibName: "MyChatViewCell", bundle: nil), forCellReuseIdentifier: "MyChat")
let chat1 = ChatEntity(text: "text1", time: "10:01", userType: .I)
let chat2 = ChatEntity(text: "text2", time: "10:02", userType: .You)
let chat3 = ChatEntity(text: "text3", time: "10:03", userType: .I)
chats = [chat1, chat2, chat3]
}
}
extension ChatViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.chats.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let chat = self.chats[indexPath.row]
if chat.isMyChat() {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyChat") as! MyChatViewCell
cell.clipsToBounds = true
// Todo: isRead
cell.updateCell(text: chat.text, time: chat.time, isRead: true)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "YourChat") as! YourChatViewCell
cell.clipsToBounds = true
cell.updateCell(text: chat.text, time: chat.time)
return cell
}
}
}
extension ChatViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath)
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 10
}
}
我应该怎么做才能正确工作? 请给我一个建议。
添加)
ChatViewController 被另一个类文件调用。
let chatViewController = ChatViewController()
self.navigationController?.pushViewController(chatViewController, animated: false)
而且我相信@IBOutlet 连接正确。
ChatViewController.swift
ChatViewController.storyboard
而且我知道调用此函数时 tableView 为 nil。
实际上,我对故事板了解不多,因为我通常不使用故事板。我更喜欢通过代码创建 UI。但是现在,我必须使用故事板文件,因为我想使用聊天系统的示例项目。
添加2)
我想我可能弄错了故事板的设置。我不知道如何在故事板上使用导航控制器或入口点。
【问题讨论】:
-
哪一行给出了异常?
-
另外,如果您使用的是故事板,请不要注册 nib 文件;在情节提要场景中使用原型单元。
-
尝试调试和跟踪哪一行给你错误的力量完全包装一个零值。
-
错误发生在以下代码中。 "tableView.separatorColor = UIColor.clear"
-
检查 tableView
@IBOutlet确保它在您的界面构建器元素中正确连接
标签: ios swift uistoryboard