8

Xcode 4.3 は、現在の に存在する宣言されていないメソッドについて警告しません @implementation。これは優れた新機能です。ただし、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' 

現在の@implementationスコープ内でメソッドを検索できないため、Xcode 4.2 の警告とエラーを完全に理解しています。(修正は簡単です。メソッドをsmallRectメソッドの上に置くか、カテゴリまたはヘッダーでメソッドをfoo宣言します。)smallRect

しかし、Xcode 4.3 で警告をオンにして、4.2 を実行している同僚に渡す前にこのエラーをキャッチするにはどうすればよいでしょうか?

4

3 に答える 3

0

このような移行中の 1 つのオプションは、別のコンパイラ/バージョンでクロスコンパイルすることです。gcc-llvm は、プレインストールされている一般的な代替手段の 1 つです。別のアプローチは、複数のバージョンの xcode をインストールし、そのツールチェーンを使用してビルドすることです。

于 2012-07-10T18:33:23.183 に答える
0

新しい LLVM 3.1 コンパイラはこれを気にしません。メソッドの上下配置、プロトタイプの有無は問いません。したがって、すべての同僚が Xcode を少なくとも 4.3 に更新しているとします。これは本当に問題になるべきではありません。

もう 1 つのオプションは、以下のコードを使用して独自の警告を作成することです。あなたは彼らにこの問題と目前の問題を冷静に知らせます。これは、メッセージを伝える簡単な方法かもしれません。

#warning "warning message"

お役に立てれば。

于 2012-03-14T01:37:28.307 に答える
0

面白いビルドがあるかどうかはわかりませんが、私の LLVM 3.1 コンパイラには、コンパイラ警告の下に宣言されていないセレクタ フラグがあります。現在 4.3.2 を実行しています。ただし、LLVM 4.0 にはありません。

于 2012-07-10T16:25:13.380 に答える