语义问题:在消息发送表达式的开头缺少'['

时间:2012-04-28 02:30:06

标签: ios nslog afnetworking testflight

我遇到了一个奇怪的语义问题:

  

在消息发送表达式的开头缺少'['

和解析问题:

  

预期']'

NSLog的{​​{1}}行中

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

没关系。

但为什么原来的不是?:?

1 个答案:

答案 0 :(得分: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__作为宏参数名称。所有以两个下划线开头的标识符都是保留的。 (还保留所有以下划线后跟大写字母开头的标识符。)