斯威夫特3 - SIGABRT错误 - numberOfComponentsInPickerView:]:无法识别的选择发送到实例
刚刚更新斯威夫特3和Xcode中8 Beta中4斯威夫特3 - SIGABRT错误 - numberOfComponentsInPickerView:]:无法识别的选择发送到实例
固定所有的代码问题后,我现在有一个错误免费项目,但它是扔单击我的前屏幕上的某个特定按钮时出现SIGABRT错误。
我相信,这是值得做的目的地页面上的UIPickerView元素,因为我已经删除,检查并重新添加的所有塞格斯和出口,以确保一切是从侧面清晰。
该控制台示出以下内容:
2016年8月2日18:59:46.607 ForceIt [38735:2895259] - [ForceIt_.DirectoryViewController numberOfComponentsInPickerView:]:无法识别的选择发送到实例0x7fcd68c0c210 2016年8月2日 18:59:46.618 ForceIt [38735:2895259 ***终止应用程序由于未捕获 异常 'NSInvalidArgumentException',原因: “ - [ForceIt_.DirectoryViewController numberOfComponentsInPickerView:]: 无法识别的选择发送到实例0x7fcd68c0c210'
从相关视图 - 控制的代码如下:
import UIKit
var forceSelectedForTabView = String()
var forceSelectedPositionInArray = Int()
class DirectoryViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet weak var forcePicker: UIPickerView!
@IBOutlet weak var selectedContactLabel: UILabel!
@IBOutlet weak var selectedPhoneTextView: UILabel!
@IBOutlet weak var selectedWebsiteTextView: UILabel!
//function for the number of columns in the picker
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
//function counting the array to give the number of rows in the picker
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return forcePickerData.count
}
//function displaying the array rows in the picker as a string
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return forcePickerData[row]
}
//function allowing the font and colour of the picker to be changed
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let titleData = forcePickerData[row]
let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Verdana", size: 25.0)!,NSForegroundColorAttributeName:UIColor.black])
return myTitle
}
//function returning the selected row from the picker
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
forceSelectedForTabView = String(forcePickerData[row])
forceSelectedPositionInArray = forcePickerData.index(of: forcePickerData[row])!
self.selectedContactLabel.text = issiData[Int(forcePickerData.index(of: forcePickerData[row])!)]
self.selectedPhoneTextView.text = phoneData[Int(forcePickerData.index(of: forcePickerData[row])!)]
self.selectedWebsiteTextView.text = websiteData[Int(forcePickerData.index(of: forcePickerData[row])!)]
}
}
numberOfComponentsInPickerView:
是UIPickerViewDataSource
声明的方法,但你的DirectoryViewController
在其符合的协议列表中缺少UIPickerViewDataSource
。
更改类标头,如:
class DirectoryViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
不这样做,夫特不能从该方法numberOfComponents(in:)
暴露numberOfComponentsInPickerView:
。
我设法通过删除所有以前的代码从代码库再次插入的方法来解决这个问题。新代码没有什么不同,但似乎已被接受。
一切都很好,再 - 想我可能会在更新过程中只是激怒的错误。
你在哪里设置'forcePickerData'等于什么?看起来问题出在'numberOfRowsInComponent'方法中 – Asdrubal
它返回为拾取器提供数据的数组的计数。该数组位于上面共享的代码末尾的下方。 它已经在Xcode 7下完美工作,但它证明了Xcode 8下的恶梦...... –
在'numberOfRowsInComponent'调用print(forcePickerData.count)'输出是否正确? – Asdrubal