此 class 与键名或我在代码中提供的任何值的键值编码不兼容
this class is not key value coding-compliant for the key name or any values what i am giving in my code
我正在尝试将文本字段用作搜索栏。我添加了所有委托方法。但是,当我开始在我的文本字段中输入任何字母时,它会崩溃,例如:
this class is not key value coding-compliant for the key name.
我的对象包含(即我试图在我的 tabke 视图中填充数据的是)
{
"lo_name" = "yourData"
}
我的代码:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
if string.isEmpty
{
search = String(search.characters.dropLast())
}
else
{
search=textField.text!+string
}
print(search)
let predicate=NSPredicate(format: "SELF.lo_name CONTAINS[cd] %@", search)
let arr=(objectArray as NSArray).filtered(using: predicate)
if arr.count > 0
{
SearchedobjectArray.removeAll(keepingCapacity: true)
SearchedobjectArray = arr as! [MyLooVC.Objects]
}
else
{
SearchedobjectArray=objectArray
}
looTable.reloadData()
return true
}
我试着像下面这样给予:
1.let predicate=NSPredicate(format: "SELF.loo_name CONTAINS[cd] %@", search)
2.let predicate=NSPredicate(format: "SELF.name CONTAINS[cd] %@", search)
但是没有什么是成功的。仍然遇到同样的崩溃。有什么解决办法吗?
谢谢
我认为你的数据数组是这样的:
[
{
"lo_name" = "yourData1"
},
{
"lo_name" = "yourData2"
}
]
你应该使用 swift 类型数组而不是 NSArray
,所以你的 objectArray
会像:
let objectArray: [[String: Any]]?
let objectArray: [[String: String]]? // if all values are string type
你应该像这样过滤数组:
let arr = objectArray?.filter({ ([=12=]["lo_name"] as? String)?.contains(search) ?? false })
let arr = objectArray?.filter({ [=12=]["lo_name"]?.contains(search) ?? false }) // It all values in dictionary are string type
对于结构数组:
struct Objects {
var looId : String?
var looName : String?
}
let objectArray = [Objects]()
// filter it like
let arr = objectArray.filter({ [=13=].looName?.contains(search) ?? false })
我正在尝试将文本字段用作搜索栏。我添加了所有委托方法。但是,当我开始在我的文本字段中输入任何字母时,它会崩溃,例如:
this class is not key value coding-compliant for the key name.
我的对象包含(即我试图在我的 tabke 视图中填充数据的是)
{
"lo_name" = "yourData"
}
我的代码:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
if string.isEmpty
{
search = String(search.characters.dropLast())
}
else
{
search=textField.text!+string
}
print(search)
let predicate=NSPredicate(format: "SELF.lo_name CONTAINS[cd] %@", search)
let arr=(objectArray as NSArray).filtered(using: predicate)
if arr.count > 0
{
SearchedobjectArray.removeAll(keepingCapacity: true)
SearchedobjectArray = arr as! [MyLooVC.Objects]
}
else
{
SearchedobjectArray=objectArray
}
looTable.reloadData()
return true
}
我试着像下面这样给予:
1.let predicate=NSPredicate(format: "SELF.loo_name CONTAINS[cd] %@", search)
2.let predicate=NSPredicate(format: "SELF.name CONTAINS[cd] %@", search)
但是没有什么是成功的。仍然遇到同样的崩溃。有什么解决办法吗?
谢谢
我认为你的数据数组是这样的:
[
{
"lo_name" = "yourData1"
},
{
"lo_name" = "yourData2"
}
]
你应该使用 swift 类型数组而不是 NSArray
,所以你的 objectArray
会像:
let objectArray: [[String: Any]]?
let objectArray: [[String: String]]? // if all values are string type
你应该像这样过滤数组:
let arr = objectArray?.filter({ ([=12=]["lo_name"] as? String)?.contains(search) ?? false })
let arr = objectArray?.filter({ [=12=]["lo_name"]?.contains(search) ?? false }) // It all values in dictionary are string type
对于结构数组:
struct Objects {
var looId : String?
var looName : String?
}
let objectArray = [Objects]()
// filter it like
let arr = objectArray.filter({ [=13=].looName?.contains(search) ?? false })