2017-12-03 25 views
0

그래서 두 구성 요소가있는 UIPickerView가 있습니다. 첫 번째는 "찬장", 두 번째 "서랍장". 그들은 CoreData 찬장에서 일대 다 많은 관계가 있습니다 < - >> 서랍. 찬장을 선택하면 일치하는 서랍 만 표시됩니다. 나는 그 관계로 일하는 방법을 확신하지 못합니다. 찬장을 보여주는 내가 가진 무엇첫 번째 구성 요소에 따라 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){ 

    } 
} 

은 사전에 감사

업데이트 :

가 지금처럼있어,하지만 난 어떤 결과를 얻을 수 없습니다.

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

당신은 생성하고 가져 오는 결과와 cupboardDrawers 배열을 업데이트해야합니다 :

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의 사용 무엇을 신속하고하지 않도록 새로운 해요, 감사합니다. 찬장 드레서는'var cupboardDrawers = [Drawer]()'여야합니까? – Sane

+0

당신은 환영합니다;) 맞습니다. 술어는 엔티티를 설정 한 방법에 달려 있습니다. 예를 들어 NSPredicate 일 수 있습니다 (형식 : "cupboard == % @", 찬장 [행] .name) –

+0

'no items found' 전화 – Sane