2012-04-28 9 views
0

を送って、私は奇妙なセマンティック問題を得る:セマンティック問題:欠落している「[」のメッセージの先頭に表現

は、「[」のメッセージの先頭に表現

と解析問題を送信行方不明で

期待

']'

AFURLConnectionOperation.mの行:Proj-Prefix.pch

私はこのエラーを修正するにはどうすればよい:

@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__) 

を追加した後?
私は..しかしNSLogラインアウトコメント以外の任意の回避策なしで事前に

感謝を検索!


EDIT:

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]); 

大丈夫です。

なぜオリジナルのものではないのですか?:?

答えて

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つのアンダースコアで始まるすべての識別子は予約されています。 (また、アンダースコアと大文字で始まるすべての識別子が予約されています)

+0

ありがとう@rob!それは本当に素晴らしいです! (このマクロはTestFlightで提案されています)Btw、私はあなたの答えの大部分が素晴らしいことを知っています!あなたは天才! ;) – Kjuly

関連する問題