does not implement methodSignatureForSelector: -- trouble ahead

刚开始写 Objetive-C 程序,有时候写了一个类时,一调用实例或是类的方法就报错,错误内容大约如下:

2011-06-19 01:14:10.175 Hello World[26080:40b] *** NSInvocation: warning: object 0x4654 of class 'Car' does not implement methodSignatureForSelector: -- trouble ahead
2011-06-19 01:14:10.178 Hello World[26080:40b] *** NSInvocation: warning: object 0x4654 of class 'Car' does not implement doesNotRecognizeSelector: -- abort

调用代码,非常简单,就是:

Car* car = [[Car alloc]init];
[car foo];

看错误仿佛是找不到 foo 方法,可是仔细检查再检查,方法也是有的,也没有打错字。

后来找到原因了,是源自于 Java 代码写多了的缘故,忘记了让自己定义的 Objective-C 类继承自 NSObject,写成了: 阅读全文 >>

Xcode4 相较于 Xcode3 使用中一些体验

从 Xcode3 升级到 Xcode4 的一些使用体验:

1. 注释的时候更智能,按 Command + / 时不会像 Xcode3 里那样在光标处插入 //,而是会在行首加 //,并且多行注释时 // 很整齐了

2. 大括号有自动补齐的功能了,方法后输入左花括号 { 后,右边的花括号 } 由 Xcode 自动加上。

3. 智能提示中的内容丰富的多,方法的参数返回类型看得很清楚,尚不明最前面标识的 K、f、P、V、x、T、C、M、#等是什么意义,不过也差不多有些概念了。

4. @interface 的模板也不一样了,出现默认 @private 修饰关键字,这是对的,默认的实例变量应该是隐藏的,@interface 的模板是:

@interface <# class name #> : <# superclass #> { 阅读全文 >>