2014-11-04 62 views
1

我有一個日誌功能NSInteger的警告:刪除使用__LINE__

#define LOGERROR(err) if(err) {      \ 
    LOGTRACE(@"[NSError] %s (%d): (%d:%@) Reason: %@", \ 
     __PRETTY_FUNCTION__,       \ 
     __LINE__,          \ 
     err.code,          \ 
     err.domain,          \ 
     err.localizedDescription)      \ 
} 

當我把它與

LOGERROR(playerItem.error); 

我得到一個警告:「NSInteger的不應該被用來作爲一個格式化參數,加明確演員長「。

Xcode的autofix在LOGERROR之前插入%ld,這是錯誤的。

我覺得這個警告來自使用__LINE__,它根據https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html返回一個int。

如何從此通話中刪除警告?

+1

我認爲它實際上對'err.code'感到惱火,它返回一個'NSInteger'。投它:'(long)(err.code)',然後在格式字符串中使用'%ld'。 – ravron 2014-11-04 19:17:08

+0

啊,謝謝,就是這樣。只是誤解了它。 – quantumpotato 2014-11-04 19:22:30

回答

1

剛剛正式我評論答曰:

編譯器抱怨使用err.code,它返回一個NSInteger。將其轉換爲long(long)(err.code),然後在格式字符串中使用%ld