我有一个日志功能:
#define LOGERROR(err) if(err) { \
LOGTRACE(@"[NSError] %s (%d): (%d:%@) Reason: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
err.code, \
err.domain, \
err.localizedDescription) \
}
当我用
打电话时LOGERROR(playerItem.error);
我收到警告:" NSInteger不应该用作格式参数,为long"添加显式强制转换。
Xcode的自动修复程序在LOGERROR之前插入%ld,这是错误的。
我认为此警告来自使用__LINE__
,根据https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html返回一个int。
如何从此次通话中删除警告?
答案 0 :(得分:1)
只是将我在评论中给出的答案正式化:
编译器抱怨使用err.code
,它返回一个NSInteger。将其投放到long
:(long)(err.code)
,然后在格式字符串中使用%ld
。