ios - UIPickerView 取决于第一个组件

标签 ios swift core-data uipickerview

所以我有一个包含两个组件的 UIPickerView。第一个叫“Cupboards”,第二个叫“Drawer”。他们在 CoreData Cupboards <-->> Drawer 中有一对多的关系。如果我选择一个橱柜,我希望只显示匹配的抽屉。我不确定如何处理这种关系。

这就是我用来展示 Cupboard 的东西:

    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)
        }
    }
}

最佳答案

您需要使用获取的结果创建和更新 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) 
        }
    }
}

关于ios - UIPickerView 取决于第一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622271/

相关文章:

ios - 有一个非可选的弱引用有意义吗?

ios - CoreData 中的 NSData 未正确保存

ios - 如何在 Swift 中使用 plist 中的值而不将它们作为 AnyObject 出现?

ios - CAEmitterLayer 与 CACurrentMediaTime() 的计时不正确,有时根本不显示

android - 我可以增加 iOS/Android 应用程序的版本号,即使用户没有安装应用程序来更新吗

ios - 核心数据错误 1550

iphone - 核心数据获取与另一个对象有关系的对象

ios - 奇怪的 UITable Separator 问题 - 右移

swift - 计时器功能崩溃的应用程序

swift - 如何在部署在 Windows Server 上的 Jenkins 上运行 Swift 单元测试