向pickerview添加NSManagedObject数组的问题

时间:2017-09-25 09:42:41

标签: ios swift uipickerview

我有一个选择器视图,其数据我在pickerview中填充了didSelectRow ...

myTextField.text = self.myArray[row]

最初myArray的类型为字符串。事情进展顺利。但现在myArray的类型为NSManagedObject。所以它不接受。有关如何解决这个问题的任何想法......?

编辑:这就是我从选择器视图访问数组的方式

   func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if self.appDelegate.commonProductCategArray.count == 0 {
                // An alert message shown here.
        } else {

            let person = self.appDelegate.commonProductCategArray[row]

            categListTextField.text = person.value(forKey: "categoryName") as? String

        }
    }

这里,commonProductCategoryArray在向数据库添加记录时从另一个视图控制器获取其值,如此...

 try managedContext.save()
 self.mangObjArr.append(category as! Category)
 self.appDelegate.commonProductCategArray = self.mangObjArr

2 个答案:

答案 0 :(得分:3)

Picker View仅在其组件标签中显示String,因此您需要从NSManagedObject获取字符串。

textfield.text = managedObject.value(forKeyPath: "keyName") as? String

根据苹果文件:https://developer.apple.com/documentation/coredata/nsmanagedobject

在某些方面,NSManagedObject的行为类似于字典 - 它是一个通用容器对象,可以有效地为其关联的NSEntityDescription对象定义的属性提供存储。

因此,您可以从其keyPath获取值。

修改 您正在获取正确的数据。因此它显示在textfield中,但您忘记在选择器视图标题中更新它。

要做到这一点:

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
       if !self.appDelegate.commonProductCategArray.isEmpty {
            let person = self.appDelegate.commonProductCategArray[row]
            return person.value(forKey: "categoryName") as? String
       }
       return ""
}

答案 1 :(得分:0)

如果您不知道如何从PickerView

获取字符串值,那么首先出现的问题是如何在PickerView中显示数据

然而,它就像从普通字符串数组

中获取数据一样简单

假设您在具有Person属性的选择器视图中显示name类对象

因为每个NSManagedObject子类都包含您在创建架构时定义的属性

您的数组

var array = [NSManagedObject]()

你只需要用正确的方法解析它

(array.first as! Person).name 

你有价值!!!