0

奇妙なセマンティックの問題が発生します。

メッセージ送信式の先頭に「[」がありません

および解析の問題:

期待される ']'

NSLog行でAFURLConnectionOperation.m

 @catch(NSException *e) { caughtException = e; }
 if(caughtException) {
   NSLog(NSLocalizedString(@"Unhandled exception on %@ networking thread: %@, userInfo: %@", nil), NSStringFromClass([self class]), caughtException, [caughtException userInfo]); 
 }
 [exceptionPool drain];

追加した後

#define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

私のプロジェクトのプリコンパイルファイルに:Proj-Prefix.pch

このエラーを修正するにはどうすればよいですか?
検索しましたが、行をコメントアウトする以外に回避策はありませんNSLog..

前もって感謝します!


編集:

NSLog(@"%@", [NSString stringWithFormat:NSLocalizedString(@"Unhandled exception on %@ networking thread: %@, userInfo: %@", nil), NSStringFromClass([self class]), caughtException, [caughtException userInfo]]);

NSLog(@"Unhandled exception on %@ networking thread: %@, userInfo: %@", NSStringFromClass([self class]), caughtException, [caughtException userInfo]);

大丈夫です。

しかし、なぜ元のものはそうではないのですか?:?

4

1 に答える 1

3

マクロ展開について考えてみてください。マクロで、文字列リテラルの連結を使用しようとしています。

(@"%s [Line %d] " __FORMAT__)

ただし、__FORMAT__パラメータの値はNSLocalizedString(@"Unhandled exception on %@ networking thread: %@, userInfo: %@", nil)、であり、文字列リテラルではありません。拡張は次のようになります。

(@"%s [Line %d] " NSLocalizedString(@"Unhandled exception on %@ networking thread: %@, userInfo: %@", nil))

明らかにそれは間違った構文です。NSLocalizedStringはマクロ(で定義)であるため、エラーは非常に不可解になりますNSBundle.h。したがって、完全な展開は次のようになります。

(@"%s [Line %d] " [[NSBundle mainBundle] localizedStringForKey:(@"Unhandled exception on %@ networking thread: %@, userInfo: %@") value:@"" table:nil])

ちなみに、__FORMAT__マクロパラメータ名としては使用しないでください。2つのアンダースコアで始まるすべての識別子は予約されています。(アンダースコアで始まり、大文字が続くすべての識別子も予約されています。)

于 2012-04-28T04:59:20.980 に答える