【发布时间】:2012-03-22 13:42:03
【问题描述】:
当当前
@implementation 中存在未声明的方法时,Xcode 4.3 不会发出警告,这是一个很棒的新功能。但是,当在 Xcode 4.2 上使用我的项目时,这在某些情况下会导致问题。
如何重新启用未声明方法的警告?
例如:
@interface MashTun : NSObject
- (void)foo;
@end
@implementation MashTun
- (void)foo {
CGRect rect = [self smallRect];
NSLog(@"My Small Rect: %@", NSStringFromCGRect(rect));
}
- (CGRect)smallRect {
return CGRectMake(0, 0, 100, 100);
}
@end
在 Xcode 4.2 中,这会失败:
warning: instance method '-smallRect' not found (return type defaults to 'id')
error: initializing 'CGRect' (aka 'struct CGRect') with an expression of incompatible type 'id'
我完全理解 Xcode 4.2 中的警告和错误,因为它不允许在当前 @implementation 范围内搜索方法。 (修复很简单:要么将smallRect 方法放在foo 方法之上,要么在类别或标题中声明smallRect 方法。)
但是如何在 Xcode 4.3 中打开警告以在将其传递给运行 4.2 的同事之前捕获此错误?
【问题讨论】:
-
我还没有安装 4.3 但
Build Settings下还有Undeclared Selector的选项吗?这有什么影响吗? -
你会这么认为——但那是指使用 @selector(foo) 以及它是否使用该名称检查现有方法。
-
是的,这是 4.3 的一大进步,但同时也有点麻烦。它经常灼伤我。好消息是问题很快就会随着每个人的升级而消失(我们终于可以停止不必要地预先声明方法)。
-
@RobNapier 有没有办法在 4.3 中成功使用 4.2 中相同版本的 LLVM?
-
几乎可以肯定。我通过大量符号链接使用旧的 gcc-4.0 和 10.4 SDK for PPC 构建。但是对于您的情况,没有理由这样做。下载 4.2 Xcode 并将其安装在不同的目录中,然后运行它。我同时安装了 Xcode 3、Xcode 4.2 和 Xcode 4.3。
标签: objective-c xcode clang compiler-warnings method-declaration