我有一个选择器视图,其数据我在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
答案 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
你有价值!!!