gpt4 book ai didi

swift - 无法从 Swift 中的其他类更新标签

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

我的代码有点问题,所以我无法调用函数。我在 ViewController 中创建了一个函数 func changeLabelText(text: String) { mylabel.stringValue = text },我可以用它更新标签中的文本。当我尝试从项目中的另一个类调用该函数时,出现运行时错误 (EXC_BAD_Instr...) 并且调试器停留在我尝试更改标签文本的行上,使用错误: fatal error :在展开可选值时意外发现 nil。哪里有问题?有人可以帮帮我吗!

最佳答案

关于“unexpectedly found nil while unwrapping an Optional value”错误,问题是你有一个可选的(从你提供的代码片段来看,它必须是一个隐式解包的可选)是 nil mylabel 很可能是 nil。打印值或添加断点并检查调试器中的属性以确认。

如果它是nil,那么您必须找出原因。在我们的讨论中,事实证明您正在尝试调用 View Controller 中的 Log 事件:

ViewController().Log("asdf")

问题在于,这不会在现有 View Controller 中调用 Log,而是 ViewController() 表达式最终会实例化一个新的、完全不相关的 View Controller 它的 socket 没有连接到任何东西。因此,尝试更新隐式展开的 socket 将导致您与我们分享的错误。

如果您希望这个单独的类(一个数据库管理器对象)将事件通知给 View Controller ,以便让 View Controller 更新 UI,通常有以下三种方法:

  1. 作为闭包/ block 的完成/进度处理程序。

    这用于简单的接口(interface),其中数据库需要在请求完成时通知 View Controller 。

  2. 委托(delegate)协议(protocol)模式。

    delegation模式(通常符合一些公认的 protocol )用于丰富的接口(interface),其中数据库需要将各种不同类型的事件通知 View Controller 。

  3. 通知模式。

    Notifications当您希望在数据库对象和处理这些通知的任何对象之间有一个松散耦合的接口(interface)时使用。 View Controller 可以使用 NSNotificationCenterdefaultCenter() 将自己注册为任何特定名称通知的观察者。然后,数据库对象可以发布该名称的通知(通过 userInfo 字典提供详细信息), View Controller 将收到这些事件的通知。

关于swift - 无法从 Swift 中的其他类更新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169109/

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