gpt4 book ai didi

ios - Swift 中的委托(delegate)错误

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

我正在尝试使用委托(delegate)<将 UIView(从 XIB 加载)中的 double 值发送到 ViewController/p>

这是我的协议(protocol),它只是在单击按钮时向主 ViewController 发送一个 double。

protocol HoursWorkedDelegate{
func sendHoursWorked(hoursWorked: Double);
}

class HoursWorkedView: UIView{

var delegate: HoursWorkedDelegate?;

@IBAction func calculateHoursWorked(sender: AnyObject){

// Do some calculations for the hoursWorked value


// Give value
delegate!.sendHoursWorked(hoursWorked);
}

}



// This class now wants that Double value
class ViewController: UIViewController, HoursWorkedDelegate{


// Conform to protocol
func sendHoursWorked(hoursWorked: Double){

// Lets say we just want to assign this value to a textField
hoursWorkedTextField.text = NSString(format: "%.4f", hoursWorked);
}

}

我收到的错误消息是 Thread 1: EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP, subcode=0x0)

非常感谢任何帮助,谢谢!

最佳答案

首先,将此代码段中的感叹号更改为问号:

delegate!.sendHoursWorked(hoursWorked);

这是可能导致崩溃的原因,因为您正在强制展开可选的委托(delegate)属性。问号表示我们只会在委托(delegate)存在时调用委托(delegate)上的 sendHoursWorked()

该修复现在可能意味着您的程序不再崩溃,但您仍然没有获得所需的结果,因为从未调用过 sendHoursWorked()。我们必须告诉我们的 HoursWorkedView 对象是谁在委托(delegate)它。

在你的代码中,你可能有这样的东西:

let hoursWorkedView = HoursWorkedView()

self.view.addSubview(hoursWorkedView)

就在这里我们应该设置委托(delegate):

let hoursWorkedView = HoursWorkedView()
hoursWorkedView.delegate = self
self.view.addSubview(hoursWorkedView)

虽然如果是我,我可能会向 HoursWorkedView 添加一个接受委托(delegate)属性的构造函数:

init(delegate: HoursWorkedDelegate) {
super.init()
self.delegate = delegate
}

现在我们可以这样做:

let hoursWorkedView = HoursWorkedView(delegate: self)
self.view.addSubview(hoursWorkedView)

关于ios - Swift 中的委托(delegate)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090197/

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