Swift 在尝试访问分段控制索引时抛出错误
Posted
技术标签:
【中文标题】Swift 在尝试访问分段控制索引时抛出错误【英文标题】:Swift throws error when trying to access segmented control index 【发布时间】:2017-01-12 22:05:50 【问题描述】:我目前正在学习 swift 并开始使用我自己的第一个计算器。 这一切都通过一个按钮来计算结果,但我想稍微改进一下。 UI 基本上由两个用于数字的文本字段、一个用于操作员的分段控件和一个用于显示结果的标签组成。所以这就是我想要发生的事情:
每次更改分段控制值时,都会计算并显示一个新的结果。
错误:
[Calculator.MainInterfaceViewController operatorChanged:]:无法识别的选择器发送到实例 XXXX ... * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[Calculator.MainInterfaceViewController operatorChanged:]:无法识别的选择器发送到实例 XXXX * 首先抛出调用栈: ... libc++abi.dylib:以 NSException 类型的未捕获异常终止 (lldb)
我的班级:
class MainInterfaceViewController: UIViewController, UITextFieldDelegate
@IBOutlet var ersteZahl: UITextField!
@IBOutlet var zweiteZahl: UITextField!
@IBOutlet weak var ergebnisLabel: UILabel!
@IBOutlet weak var segment: UISegmentedControl!
override func viewDidLoad()
super.viewDidLoad()
ersteZahl.delegate = self;
zweiteZahl.delegate = self;
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string) as NSString
textField.text = newString as String
refreshUIElements()
return false
@IBAction func operatorChanged()
refreshUIElements()
func refreshUIElements()
let zahl1 = NSString(string: ersteZahl.text!).doubleValue
let zahl2 = NSString(string: zweiteZahl.text!).doubleValue
switch self.segment.selectedSegmentIndex
case 0:
ergebnisLabel.text = "Ergebnis: \(zahl1 + zahl2)"
case 1:
ergebnisLabel.text = "Ergebnis: \(zahl1 - zahl2)"
case 2:
ergebnisLabel.text = "Ergebnis: \(zahl1 * zahl2)"
case 3:
if zahl2 == 0
ergebnisLabel.text = "Error: Cannot divide by 0."
return
ergebnisLabel.text = "Ergebnis: \(zahl1 / zahl2)"
default:
break
【问题讨论】:
你在哪里打电话给operatorChanged
?问题是你的方法没有参数,但错误说它调用了一个同名但有参数的方法(后面有“:”)。你把它和故事板联系起来了吗?如果是,要么重命名 operatorChanged
以接受每个 IBAction 所做的事情,作为发件人,要么在 Storyboard 中重新链接它。
@Larme 是的,我通过我的主故事板链接了它。我已经尝试重新链接它。你知道如何解决它吗?非常感谢你:)
【参考方案1】:
我猜你在自动生成或尝试手动创建方法后修改了它?
@IBAction's
需要一个sender
参数。像这样的:
operatorChanged(sender: UISegmentedControl)
完全删除该方法,然后再次从情节提要中按住 ctrl + 拖动到文件中。如果弹出窗口,请选择操作并为方法命名。在此之后不要修改方法定义,否则会导致同样的问题。
【讨论】:
以上是关于Swift 在尝试访问分段控制索引时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章