我正在尝试做的是有一个按钮,它将从UIPickerviewer中提取信息,然后将其添加到数组中,但是当程序运行并且按下按钮时它会崩溃。在swift中编程的新手......想要更好的解释。
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var PickerView: UIPickerView!
@IBOutlet var list: [UILabel]!
@IBAction func add(_ sender: UIButton) {
var shift = true
}
@IBOutlet weak var label: UILabel!
var deviceList = [""]
var shift = false
override func viewDidLoad() {
super.viewDidLoad()
label.text = "Device List"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
let devices = ["Mobile Phone","Microwave","Heater","Fridge","Router","Drill"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return devices[row]
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return devices.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
label.text = devices[row]
if(shift == true){
deviceList.append(label.text!)
print(deviceList)
shift = false
}
}
}
答案 0 :(得分:0)
如果您在点击按钮时遇到崩溃,我会假设参与IBOutlet
事件时存在一些冲突的分配。原因是因为你的add(_:)
动作方法除了创建一个名为shift
的新布尔属性之外没有做任何事情,即使它与类属性shift
({{ 1}}),实际上不应该导致崩溃。有时在界面构建器中,您可能有一个意外分配了多个事件的插座,如果您删除了代码中的某个事件,这通常会导致我的体验崩溃。例如:假设您为按钮创建了一个事件(如self.shift
),然后忘记并意外创建了第二个事件。然后你意识到你的错误并删除了第二个事件的代码,但不知道你必须删除事件插座。界面构建器将允许您犯这个错误,但是当您点击按钮时会导致应用程序崩溃,因为它正在尝试调用不再存在的事件。
如果您想通过IB检查是否有任何不必要的事件分配,请使用Interface Builder控制+单击屏幕左侧文档大纲中的按钮。
您将看到“引用插座”标题下列出的引用插座。您可以通过单击左上角的小“X”来删除任何不必要的。您还可以通过检查插座是否在右侧有一个小圆圈(这意味着它已连接)来判断插座是否实际已连接。这是一个示例,在这种情况下,我创建了一个名为add(_:)
的方法的事件调用,然后我将其删除。点按按钮会导致崩溃。
如果我点击“X”按钮并删除tryAgain:
事件。单击按钮时,该应用程序将起作用。
我不确定这是你的问题,但根据你所分享的内容,听起来对我很不错。希望这可以帮助。不过,我建议您在tryAgain:
方法中实际执行一些代码。
答案 1 :(得分:0)
您发布的IBAction没有任何内容可能导致崩溃。你需要在函数体中删除单词“var”,以便它改变实例变量的状态,而不是设置一个从不做任何事情的局部变量,但这不会导致崩溃。
那就是说,你的“标签”出口被宣布为一个隐含的未包装的选项,这对于网点来说是正常的:
@IBOutlet weak var label: UILabel!
如果插座没有连接任何东西,那么只要您尝试读取或写入标签插座或标签的属性,如果标签为零,您将崩溃。
检查插座是否正确连接。如果不是,那么当你操作选择器时我会指望你崩溃。 (不是在您单击添加按钮时。)