1

我有一个日志功能:

#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。

我怎样才能从这个电话中删除警告?

4

1 回答 1

1

只是为了正式化我在评论中给出的答案:

编译器抱怨使用err.code,它返回一个 NSInteger。将其转换为long: (long)(err.code),然后%ld在格式字符串中使用。

于 2014-11-04T19:23:41.663 回答