2017-10-31 15 views
0

データソースを変更したため、picker.reloadAllComponents()コールがあります。しかし、私はエラーThread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)を取得し、私は理由を知っているが、私はUIPickerViewを動作させたい。UIPickerView picker.reloadAllComponents()が迅速に機能しない4

私はUIPickerViewはそれを示すリストと、新しい基準に基づいて、UIに、リストのリフレッシュしたい:

pickerData = [] 
    for node : [String:Any] in _choices{ 
     let _nodename = node["name"] as? String ?? "" 
     let _filtername = filterField.text ?? "" 
     if ((_nodename.range(of: _filtername)) != nil){ 
      pickerData.append(_nodename) 
     } 
    } 
:私は、テキストボックスの上の変更でこれを行う

class ViewControllerDisplay: UIViewController, UIPickerViewDataSource{ 
    //...... 

    var pickerData: [String] = [] 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     return pickerData.count 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return pickerData[row] //<-- Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){ 
     self.view.endEditing(true) 
    } 
    let pickerView = PREMUIPickerView(frame: CGRect(x: 0, y: 130, width: 250, height: 300)) 
    pickerView.dataSource = self 
    pickerView.delegate = self 

私は、単に今、この

for view in (filterField.superview?.subviews)! { 
     if let picker = view as? UIPickerView { 
      picker.reloadAllComponents() 
     } 
    } 

を行います。 SHOULD UIPickerViewはデータソースをリセットし、フィルタリングされたリストに基づいてUIに再描画する必要があります。それはしません。 pickerDataリストは確かにフィルタリングされます。しかし、視覚的要素が故に変更されていない私はfunc pickerViewThread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0))にラインからfatal error: Index out of rangeエラーを取得するので、私の質問は:

あなただけpicker.reloadAllComponents()以上のものを使用してデータソースを更新し、実際にリフレッシュするためのiOSに伝えるにはどうすればよいです情報元?

答えて

0

私は間違いを犯しました。がうまくいきます。この問題は、コード内のどこかで、私がピッカーの見解をどのように識別したかに関するものでした。 (基本的に私は間違ったid'dを持っていた、もう一つはページの上に)。

誰もがuipickerviewに基づいてフィルタリストにアクセスしたい場合に備えてコードを保存します

+0

これは書かれているように有用な答えではありません。それは今後の読者を助けるものではないので、質問全体を削除するほうが意味があります。 – rmaddy

+0

よく 'UIPickerView'をフィルタリングできないと言っている投稿がたくさんありますが、できますし、その例もありません –

関連する問題