2017-12-03 11 views
0

したがって、私は2つのコンポーネントを持つUIPickerViewを持っています。最初のものは「食器棚」と呼ばれ、2番目の「引き出し」です。彼らはCoreData Cupboardsで1対1の関係を持っています< - >>引き出し。 Cupboardを選択すると、一致する引き出しのみが表示されます。私はその関係をどのように働かせるかわからない。食器棚を示すために私が持っているものだ最初のコンポーネントに依存するUIPickerView

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 2 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if(component==0){ 
       return cupboards.count 
      } 

    xxxx 

} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if(component==0){ 
     return cupboards[row].name 
    } 

    xxxx 

} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if(component==0){ 

    } 
} 

は事前に

更新ありがとう:

は今そのようにそれを手に入れたが、私は結果を得ることはありません。

あなたがフェッチ結果とcupboardDrawers配列を作成し、更新する必要が
var cupboardDrawers = [Drawer]() 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if(component==0){ 
     let request: NSFetchRequest<Drawer> = Drawer.fetchRequest() 
     request.predicate = NSPredicate(format: "cupboard == %@", cupboards[row].name!) 

     do{ 
      let result = try mgdContext.fetch(request) 
      cupboardDrawers = result 
      addEatDataPicker.reloadAllComponents() 
     }catch{ 
      print(error.localizedDescription) 
     } 
    } 
} 

答えて

1

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 2 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if(component==0){ 
     return cupboards.count 
    } else { 
     return cupboardDrawers.count 
    } 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if(component==0){ 
     return cupboards[row].name 
    } else { 
     return cupboardDrawers[row].yourProperty 
    } 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if(component==0){ 
     // you can add this part to a separate function and call it here 
     cupboardDrawers = [] 
     let request = NSFetchRequest<Drawer>(entityName:”Drawer”) 
     request.predicate = YourPredicate with cupboards[row].name 
     do { 
      let items = context.fetch(request) 
      guard items.count > 0 else { 
       print(“no items found”) 
       return 
      } 
      cupboardDrawers = items 
      //reload your picker 
     } catch { 
       print(error) 
     } 
    } 
} 
+0

ねえありがとう、私はYourPredicateの代わりに使うかわから迅速に新しくありませんよ。 cupboardDrawersは 'var cupboardDrawers = [Drawer]()'にする必要がありますか? – Sane

+0

あなたは歓迎です;)はい、それは正しいです、述語はあなたのエンティティを設定した方法に依存します。例えばNSPredicate(書式: "cupboard ==%@"、cupboards [row] .name) –

+0

'no items found'コール – Sane

関連する問題