2012-05-28 18 views
5

मैंने # if और # परिभाषित कथन की कई परिभाषाएं पढ़ी हैं।
मैं जिस तरह से मैंने पढ़ा है का उपयोग करने की कोशिश की है, लेकिन केवल त्रुटि लाइन पर है कि यह नीचे एक टिप्पणी के रूप में परिभाषित करता है "एक पूर्वप्रक्रमक अभिव्यक्ति के शुरू में अमान्य टोकन" के साथ:#define या #if कथन त्रुटि

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

#define is_ipad   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define is_ipad_hd  ((is_ipad == 1 && [UIScreen mainScreen].bounds.size.width > 1024) ? YES : NO) 
#define is_iphone_hd ([UIScreen mainScreen].bounds.size.width > 480 ? YES : NO) 
#define device_width 480.0f 
#define device_height 320.0f 

#if (is_ipad_hd == YES) // Error here 
    #define device_width  = 2048.0f 
    #define device_height  = 1496.0f 
#endif 

ऐसा क्यों है में काम करता है सरल ट्यूटोरियल और जब हम कुछ और जटिल होते हैं तो ये चीजें होती हैं!

+4

प्रीप्रोसेसर निर्देशों का संकलन से पहले मूल्यांकन किया गया है, तो मैं यहां से बेहतर रूप से प्राप्त कर सकता हूं; इतनी स्पष्ट रूप से वे रन-टाइम जानकारी पर काम नहीं कर सकते हैं। (मुझे उद्देश्य सी नहीं पता, लेकिन '[यूआईस्क्रीन मुख्यस्क्रीन] .bounds.size.width' रन-टाइम चीज़ की तरह लगता है ...) –

+0

ठीक है, अब मैं समझता हूं। तो मैं डिवाइस के स्क्रीन आकार को कैसे निर्दिष्ट करूं? क्षमा करें मेरी धीमी गति, क्योंकि अंग्रेजी में कुछ शोध तकनीकों का अनुवाद करना मुश्किल है और जिस तरह से मैं कल्पना करता हूं उसे देखना चाहिए। –

उत्तर

4

ये प्रीप्रोसेसर निर्देश हैं, इसलिए आपके पास [यूआईस्क्रीन मुख्यस्क्रीन] विधियों और संकलन पर परिभाषित सभी अन्य वस्तुओं तक पहुंच नहीं है!

1

मैक्रो मूल्यांकन संकलन समय पर होता है।

हालांकि, (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) या [UIScreen mainScreen] केवल रन टाइम पर व्याख्या की जा सकती है।

इसके अलावा, आपको अपने गंदे काम करने के लिए स्क्रीन आकार पर निर्भर नहीं होना चाहिए। इसके बजाय आप यूजर इंटरफेस मुहावरा पर भरोसा किया जाना चाहिए और मुख्य स्क्रीन के पैमाने:

BOOL isiPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; 
BOOL isHD = [[UIScreen mainScreen] scale] == 2.0; 

if (isiPad) { 
    if (isHD) { 
    // retina iPad 
    } else { 
    // non-retina iPad 
    } 
} else { 
    if (isHD) { 
    // retina iPhone/iPod touch 
    } else { 
    // non-retina iPhone/iPod touch 
    } 
} 
+0

तो मैं इसे एक बार सेट करना चाहता हूं, इसलिए मैं # परिभाषित और # if का उपयोग करना चाहता था। अच्छी तरह से मुझे नहीं पता कि एक सरल शीर्षलेख का उपयोग करना संभव है, उदाहरण के रूप में, और प्रत्येक दृश्य में प्रक्रिया। यदि यह सही है तो मैं किस बारे में बात कर रहा हूं। धन्यवाद –

+0

मैंने आपके सुझाव का पालन किया, लेकिन हर बार चर जांचने और सेट करने के लिए हर समय गलत नहीं होगा? एक आसान तरीका है? –

0

यहाँ दूसरों के साथ सहमत हालांकि मैं के रूप में अच्छी सी पूर्वप्रक्रमक में निपुण नहीं कर रहा हूँ एक त्वरित Googling इस के साथ वापस आ गया:

अभिव्यक्ति पूर्ण प्रतिबंधों के अधीन पूर्णांक प्रकार की सी अभिव्यक्ति है। इसमें हो सकता है .... मैं source.

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