बस मेरे संदर्भ के लिए
:
@property (nonatomic, readonly) BOOL isPhone;
-(BOOL)isPhone {
return (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone);
}
या एक #define
#define IS_PHONE (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
का उपयोग हालांकि, अगर आप सब अपने कोड पर isPhone
उपयोग कर रहे हैं, कि आम तौर पर बुरा व्यवहार है। अपने if
बयानों को रखने के लिए फैक्ट्री पैटर्न और पॉलिमॉर्फिज्म का उपयोग करें, ताकि आपको फ़ोन या आईपैड के लिए बनाई गई ऑब्जेक्ट मिलें और फिर उन लोगों के साथ काम करें।
जोड़ा गया
मैं सभी मेरे कोड पर अब इस समाधान का उपयोग कर रहा हूँ। यह आवंटन में एक मानक कारखाना पैटर्न जोड़ता है।
#define ALLOC_PER_DEVICE() id retVal = nil; \
NSString *className = NSStringFromClass(self);\
if (IS_PHONE && ![className hasSuffix:@"Phone"]) {\
className = [NSString stringWithFormat:@"%@Phone", className];\
Class newClass = NSClassFromString(className);\
retVal = [newClass alloc];\
}\
if (!retVal)\
retVal = [super alloc];\
assert(retVal != nil);\
return retVal\
तब मेरे allocs इस तरह दिखेगा:
+alloc { ALLOC_PER_DEVICE(); }
और मैं एक उपवर्ग फोन संस्करण के लिए TheClassPhone
बुलाया जोड़ें।
नोट: वहाँ ऑब्जेक्टिव-सी में कोई एकाधिक वंशानुक्रम है के बाद से, अपनी समस्याओं को हल करने के वंशानुक्रम का उपयोग थोड़ा अहंकारी है (यानी, वह अगर आप उपवर्गों की उपवर्गों है काम नहीं करता है)। जब आपको इसकी आवश्यकता हो तो if
की तरह कुछ भी नहीं।
स्रोत
2012-07-23 16:21:57
पकड़ लिया - मैं उपयोग कर सकते हैं respondsToSelector: @selector (userInterfaceIdiom) के बजाय स्ट्रिंग के अस्तित्व के लिए जाँच की " आईपैड "। धन्यवाद! – Eric
मैक्रो का उपयोग करें - बाद में ओएस चयनकर्ता को जवाब देगा, लेकिन जरूरी नहीं कि एक आईपैड हो। – Andiih
ठीक है, मैं सीख रहा हूँ। :) मेरा # फ़ाईल: मैं 3.2 और 3.1 के बीच सक्रिय एसडीके स्विच करके आईफोन और आईपैड के बीच टॉगल करने के लिए सिम्युलेटर का उपयोग कर रहा हूं - जिसमें सक्रिय एसडीके 3.1 होने पर अब संकलित नहीं किया गया है। तब मैंने कुछ कैफीन के साथ न्यूरॉन्स को झुका दिया और #ifdef UI_USER_INTERFACE_IDIOM को इसके चारों ओर प्लग किया ... वैसे भी, फॉलोअप एंडीह के लिए धन्यवाद - और अगर मैंने #ifdef के साथ #worsethanfailure को #fail किया है, तो मुझे जानना। :) – Eric