setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

本文记录了一个自定义UITableViewCell导致的应用崩溃问题及其解决方案。作者通过检查无效的连接和CustomClass设置,最终解决了NSUnknownKeyException异常,并提供了详细的步骤和代码示例。

今天在写自定义UITableViewCell的时候遇到一个Crash,特别无语,折腾了大半天,终于解决了。

Bug如下:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x8a4b500> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key strss.'


先说解决办法吧:



然后讲故事:

1.如何使用IOS UITableView?

参考:http://blog.csdn.net/h3c4lenovo/article/details/8307253


2.如何使用自定义的UITableViewCell实现UITableView?

参考:http://www.howzhi.com/group/iosDevelop/discuss/2068


3.单独创建的xib/nib文件如何与.h/.m文件关联起来?

定义xib中File's Owner 或 View的Custom Class 如上图所示。注:网上大部分说报错的原因要么就是存在无效的连接,或者File's Owner的custom class没有连接。


4.代码中如何引用自定义的TableViewCell?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CustomCellIdentifier = @"testCellIdentifier";
    
    static BOOL nibsRegistered = NO;
    if (!nibsRegistered) {
        UINib *nib = [UINib nibWithNibName:@"testCell" bundle:nil];
        [tableView registerNib:nib forCellReuseIdentifier:CustomCellIdentifier];
        nibsRegistered = YES;
    }
    
    testCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];

    [cell setMyText:@"xxx"];
    
    return cell;
}


该错误信息 `error #77-D: 'this' declaration has no storage class or type specifier` 通常出现在 C/C++ 编译过程中,表示编译器在解析代码时遇到了语法问题,具体是某个声明缺少了存储类别或类型说明符。在 C++ 中,`this` 是一个指向类实例的指针,只能在类的成员函数内部使用,并且其类型由编译器自动推导为当前类类型的指针[^1]。 出现此错误的常见原因和修复方法如下: ### 1. `this` 使用在非成员函数中 如果 `this` 出现在非类成员函数的上下文中,编译器将无法识别它,因为此时没有关联的对象实例。 ```cpp void func() { this; // 错误:this 只能在类的成员函数中使用 } ``` 解决办法是确保 `this` 仅在类的成员函数中使用。 ### 2. 语法错误导致编译器误解 有时并不是直接使用 `this`,而是由于周围的语法错误,导致编译器错误地将其他表达式解析为对 `this` 的无效引用。 例如,在类定义之外意外地写了一个类似 `this` 的语句,或者在函数参数列表中有拼写错误: ```cpp class MyClass { public: void myMethod() { int this = 5; // 错误:不能将变量命名为 this } }; ``` 上述代码试图将 `this` 命名为局部变量,这会导致编译器报错。应避免将 `this` 用作变量名。 ### 3. 缺少返回类型或存储类说明符 在某些情况下,尤其是在函数声明中遗漏了返回类型或使用了非法的修饰符,也可能导致类似的错误消息: ```cpp myFunction() { } // 错误:未指定返回类型 ``` 应始终明确指定函数的返回类型,即使它是 `void`: ```cpp void myFunction() { } // 正确 ``` ### 4. 混淆了 `this` 和其他关键字 有时候开发者可能想使用 `this` 来访问成员变量,但由于拼写错误或其他语法问题,导致编译器无法正确解析。 ```cpp class MyClass { public: int value; void setValue(int val) { this->value = val; // 正确使用 this } }; ``` 只要确保 `this` 被正确用于访问类成员,就不会引发此类错误。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值