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__其用作宏参数名称。所有以两个下划线开头的标识符都是保留的。(所有以下划线后跟大写字母的标识符也是保留的。)

于 2012-04-28T04:59:20.980 回答