You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift项目App崩溃:类不符合tableView的键值编码规范,求排查解决

解决“该类不符合键值编码规范,无法识别键tableView”崩溃问题

我帮你排查下这个问题——虽然你的users类已经继承了NSObject,但崩溃的核心原因是Firebase返回的字典里包含了tableView这个键,而你的users类并没有对应的属性,触发了KVC(键值编码)的错误。

为什么会崩溃?

当你调用user.setValuesForKeys(dictionary)时,KVC机制会遍历字典里的每一个键,尝试在users对象中找到对应的属性或者set<Key>:方法。如果某个键在类里找不到匹配项,就会抛出这个“无法识别键”的崩溃。这里明显是你的Firebase节点数据里混进了tableView这个多余的键值对。

几种解决方法:

方法1:过滤字典中的无效键

在给user赋值前,先把字典里的键过滤成users类已有的属性,只保留合法的键值对:

func getData(salval:String ) {
    self.tabArray.removeAll()
    ref = Database.database().reference()
    let userID = Auth.auth().currentUser!.uid
    if salval != "" {
        ref?.child("Schedule").child("Codaphic").child(salval).child(userID).observe(.childAdded, with: { (snapshot) in
            if let dictionary = snapshot.value as? [String : AnyObject] {
                // 列出users类所有已定义的属性名
                let validKeys = ["cname", "_logi", "key", "wname", "address", "endtime", "_leti", "starttime", "date", "groupname", "month"]
                // 过滤字典,只保留有效键
                let filteredDictionary = dictionary.filter { validKeys.contains($0.key) }
                
                let user = users()
                user.setValuesForKeys(filteredDictionary)
                self.tabArray.append(user)
                self.tableView1.reloadData()
            }
        })
    }
}

方法2:重写KVC的未定义键处理方法

如果你不想手动过滤字典,可以在users类里重写setValue(_:forUndefinedKey:)方法,直接忽略掉未定义的键,避免崩溃:

import UIKit
class users : NSObject {
    var cname : String?
    var _logi: String?
    var key : String?
    var wname : String?
    var address : String?
    var endtime : String?
    var _leti : String?
    var starttime : String?
    var date : String?
    var groupname : String?
    var month : String?
    
    // 重写方法,忽略未定义的键
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        // 可选:打印日志,方便你排查哪些键是多余的
        print("注意:检测到未定义的键 \(key),已自动忽略")
    }
}

方法3:从根源清理数据

建议你登录Firebase控制台,检查Schedule/Codaphic/salval/userID路径下的所有数据,看看是不是不小心写入了tableView这个无效的键值对。如果是误操作导致的,直接删除这个键值对,就能从根源解决问题。


内容的提问来源于stack exchange,提问作者Muhammad Adeel Qureshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:05:52