通篇查找调用length方法的位置
步骤一未能定位bug位置后仔细定位闪退所涉及到的类一步步跟踪测试最终定位到了,在调用KVC的setValue: forKeyPath:方法给类属性赋值时未能完成全部的调用。最后通过print调试大法最终确定出错属性的key为askReason。使用lldb的po将key所涉及的value通过 as 各种类型观察其返回值后,最终确定原先的判断是否为null的方法并没有生效。经过一番总结后得出了如下的解决方法:
func generateValue(from:[String:Any?]) -> BaseItem {
for key in from.keys{
let v = from[key] as? NSNull
if v == nil{
setValue(from[key]!, forKeyPath: key)
}
}
return self
}
以下为原先没有生效的解决方案
func generateValue(from:[String:Any?]) -> BaseItem {
for key in from.keys{
if let value = from[key],type(of: value) != type(of: NSNull.init()){
setValue(from[key]!, forKeyPath: key)
}
}
return self
}