ios - UIPickerView.selectRow 滚动导致崩溃

标签 ios swift crash segue uipickerview

我有3个UIPickerView,每个都有不同的值:

let pickerContext = ["Aucun","@office","@computer","@home","@meeting","@read","@achat","@call"]
let pickerStatus = ["LATE","IN-PROCESS","COMPLETED","NOT-STARTED"]
let pickerField = ["INBOX","TODO","WAITING","MAYBE","NOTE"]

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if(pickerView.isEqual(ContextPickerView)){
        return pickerContext.count
    }
    if(pickerView.isEqual(StatusPickerView)){
        return pickerStatus.count
    }
    if(pickerView.isEqual(FieldPickerView)){
        return pickerField.count
    }
    return 0
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    if(pickerView.isEqual(ContextPickerView)){
        if contextText != ""{
            println(contextText)
            for (index, context) in enumerate(pickerContext)
            {
                if context == contextText
                {
                    ContextPickerView.selectRow(index, inComponent: 0, animated: false)
                }
            }
        }
        return pickerContext[row]
    }
    if(pickerView.isEqual(StatusPickerView)){
        if statusText != ""{
            println(statusText)
            for (index, status) in enumerate(pickerStatus)
            {
                if status == statusText
                {
                    StatusPickerView.selectRow(index, inComponent: 0, animated: false)
                }
            }
        }
        return pickerStatus[row]
    }
    if(pickerView.isEqual(FieldPickerView)){
        if fieldText != ""{
            println(fieldText)
            for (index, field) in enumerate(pickerField)
            {
                if field == fieldText
                {
                    FieldPickerView.selectRow(index, inComponent: 0, animated: false)
                }
            }
        }
        return pickerField[row]

    }

    return ""
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if(pickerView.isEqual(ContextPickerView)){
        contextText = pickerContext[row]
    }
    if(pickerView.isEqual(StatusPickerView)){
        statusText = pickerStatus[row]
    }
    if(pickerView.isEqual(FieldPickerView)){
        fieldText = pickerField[row]
    }

}

UIPickerViews 填充得很好,具体取决于从一个 ViewController 到带有 PickerViews 的 View Controller 传递的值,pickerViews 的光标位于正确的位置,一切都很好,但是..当我尝试交换任何 PickerView 的光标,应用程序都会在相关 *****PickerView.selectRow(index, inComponent: 0,animated: false) 上崩溃。一旦页面收费,我就无法更改任何光标。

我认为这是因为如果 if context == contextText 事实上,如果我设置 contextTextstatusTextfieldText 为“”,光标设置为第一个值,但我可以根据需要更改它们。

有什么想法、技巧可以避免这些崩溃吗?

谢谢

最佳答案

不尝试在 pickerview:titleForRow... 方法中使用 PickerView.selectRow 怎么样?当选择器 View 使行准备好显示时,将调用该方法。

在使用数据源设置选择器 View 后,只需循环数据并找到 contentText/statusText/fieldText 的索引,然后(如果找到)调用 ContextPickerView/StatusPickerView/FieldPickerView.selectRow。

关于ios - UIPickerView.selectRow 滚动导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31581156/

相关文章:

android-studio - Android Studio 3.1.1 - 无法添加模块(导入 gradle 项目)

ios - 在 Firebase 3 中重新使用访问 token

ios - 自动释放池 block

swift - 如何在 Swift 中设计一个通用的观察者模式协议(protocol)?

java - 安卓 : JNI crash

java - Akka Actor (Scala) 如何获取内存不足的堆转储

iphone - 我无法在 iphone sdk 中使用 Amazon Web Services s3 uploader

ios - 检测 iOS AirPlay 屏幕镜像功能

ios - 如何使用 Swift 3 创建标尺/刻度 slider ?

ios - 使用 Flickr API 将图像加载到 imageView 中