gpt4 book ai didi

ios - 将 UIContainerView 嵌入 TableView 并尝试通过 @IBOutlet 访问导致意外发现 nil

转载 作者:行者123 更新时间:2023-11-28 07:21:56 25 4
gpt4 key购买 nike

使用 Apple's rather old Swift Getting Started教程作为基础,我有一个工作应用程序。我想在表格顶部添加一个 UIView,以便在发生错误时临时出现。不幸的是,当尝试从 UIView 的关联类访问 UI 元素时,我收到“在隐式展开可选值时意外发现 nil”错误。

https://imgur.com/wfqFach.png

这实际上是一个 UIContainerView,但显然显示为 UIView。

我已经将 UIView 都进行了子类化和 linked view (通过嵌入 segue)带有一个我称为 ErrorView 的子类,并在 TableView 的子类中添加了一个指向 UIView 的@IBOutlet 链接。 UI 元素通过@IBOutlet 链接到ErrorView 类。

当通过表子类中的@IBOutlet 访问 ErrorView 类成员时,一切都很好,直到 ErrorView 类尝试访问其 @IBOutlet 链接元素,此时它崩溃并显示“在隐式展开可选值时意外发现 nil。 "

奇怪的是,从错误类中访问 View 本身是可能的,因此我能够做一些与 View 相关的事情,比如无错误地改变它的颜色——尽管颜色改变实际上并没有发生。

下面是一个非常精简的代码版本,应该可以重现问题。

我使用的是 iOS13 和 Xcode 11 测试版。

错误 View .swift

import UIKit

class ErrorView: UIView {

override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}

@IBOutlet weak var uiMessage: UILabel!

func setErrorMessage(errorMessage: String){
uiMessage.text=errorMessage //<-- error here
}
}

模块 TableView Controller

import UIKit
import Foundation

class ModuleTableViewController: UITableViewController {
@IBOutlet weak var errorView: ErrorView!

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
errorView.setErrorMessage(errorMessage: "Hello")
}
}


最佳答案

事实上,容器 View 包含View Controller而不是UIView,你需要为你的error viewController设置一个UIViewController类,然后为你创建一个outlet UIlable,然后设置一个协议(protocol)并让你的Error View controller符合它,当一些东西会发生,它会更新标签文本。

关于ios - 将 UIContainerView 嵌入 TableView 并尝试通过 @IBOutlet 访问导致意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com