我遇到了一个奇怪的语义问题:
在消息发送表达式的开头缺少'['
和解析问题:
预期']'
在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]]);
没关系。
但为什么原来的不是?:?
答案 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__
作为宏参数名称。所有以两个下划线开头的标识符都是保留的。 (还保留所有以下划线后跟大写字母开头的标识符。)