2012-11-13 10 views
7

मैं अपने मैक ओएस एक्स आवेदन में कोड की निम्न पंक्ति है:NSLog मुझे चेतावनी जो सुधार-नहीं हैं दे

NSLog(@"number of items: %ld", [urlArray count]); 

और मैं चेतावनी मिलती है: "स्वरूप को निर्दिष्ट प्रकार 'लंबी' लेकिन तर्क टाइप है 'NSUInteger' (उर्फ 'अहस्ताक्षरित int') "

हालांकि, अगर मैं अपने कोड बदलने के लिए:

:

NSLog(@"number of items: %u", [urlArray count]); 

मैं चेतावनी मिलती है

स्वरूप टाइप 'अहस्ताक्षरित int' निर्दिष्ट करता है, लेकिन तर्क टाइप 'NSUInteger' (उर्फ 'अहस्ताक्षरित लंबे')

तो फिर मैं इसे

NSLog(@"number of items: %u", [urlArray count]); 

करने के लिए बदल गया है, लेकिन मैं चेतावनी मिलती है: स्वरूप निर्दिष्ट करता है 'unsigned long' टाइप करें लेकिन तर्क में 'NSUInteger' टाइप किया गया है (उर्फ 'unsigned int')

मैं अपना एनएसएलओजी कैसे स्थापित कर सकता हूं ताकि यह चेतावनी उत्पन्न न करे? यदि मैं एक्सकोड के सुझावों का पालन करता हूं तो मैं प्रारूप विनिर्देशक को बदलने के अंतहीन पाश में प्रवेश करता हूं लेकिन चेतावनियां कभी नहीं जातीं।

उत्तर

14

हाँ यह कष्टप्रद है। यह एक 32/64 बिट चीज है जो मुझे विश्वास है। ऐसा करने के लिए सबसे आसान काम सिर्फ एक लंबी करने के लिए डाली है:

NSLog(@"number of items: %lu", (unsigned long)[urlArray count]); 
6

portability guide सार्वभौमिक अनुप्रयोगों के लिए इस मामले में कास्टिंग सुझाव देते हैं।

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]); 
+0

यही नहीं बल्कि अनावश्यक लगता है, लेकिन यह चेतावनी अप स्पष्ट करता है। – Jackson

+3

यह सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है लेकिन आपको शायद प्रारूप विनिर्देशक के समान प्रकार के मामले में होना चाहिए। तो (हस्ताक्षरित लंबा)% lu होगा, या (लंबा)% ld –

+0

होगा @ डैरेन यह एक फर्क पड़ता है, ऐसा नहीं कर रहा अपरिभाषित व्यवहार है। –

संबंधित मुद्दे