iphone - stores - एप्पल एप्प




एपीआई यह निर्धारित करने के लिए कि आईफोन या आईपैड पर चल रहा है (4)

  1. UserInterfaceIdiom प्रॉपर्टी की उपस्थिति के लिए जांचें, उपयोग प्रतिसाद देता है चयनकर्ता:। यदि यह अस्तित्व में नहीं है, तो हम प्री-3.2 डिवाइस पर हैं, इस प्रकार एक आईपैड नहीं है।
  2. यदि userInterfaceIdiom मौजूद है, तो इसका उपयोग करें।

संपादित करें: ... जो स्पष्ट रूप से बिल्कुल सही है UI_USER_INTERFACE_IDIOM () मैक्रो करता है, इसलिए इसके बजाय इसका उपयोग करें। :)

इस प्रश्न का उत्तर यहां दिया गया है:

क्या रनटाइम पर जांच करने के लिए कोई एपीआई है चाहे आप किसी आईफोन या आईपैड पर चल रहे हों?

एक तरीका मैं सोच सकता हूं कि इसका उपयोग करना होगा:

[[UIDevice currentDevice] model];

और स्ट्रिंग @ "आईपैड" के अस्तित्व का पता लगाएं - जो थोड़ा नाजुक लगता है।

3.2 एसडीके में, मुझे लगता है कि UIDevice में एक संपत्ति भी है जो वास्तव में मैं चाहता हूं, लेकिन प्री-3.2 (स्पष्ट रूप से) के लिए काम नहीं करती है:

[[UIDevice currentDevice] userInterfaceIdiom]; 

क्या सार्वभौमिक ऐप के लिए @ "आईपैड" के अस्तित्व की जांच करने के अलावा अन्य तरीके हैं?



चेकआउट UI_USER_INTERFACE_IDIOM

वर्तमान डिवाइस द्वारा समर्थित इंटरफ़ेस idiom देता है।

प्रतिलाभ की मात्रा
UIUserInterfaceIdiomPhone यदि डिवाइस आईफोन या आईपॉड टच या UIUserInterfaceIdiomPad तो डिवाइस एक आईपैड है।

UIUserInterfaceIdiom

इंटरफ़ेस का प्रकार जिसे वर्तमान डिवाइस पर उपयोग किया जाना चाहिए

typedef enum {
   UIUserInterfaceIdiomPhone,
   UIUserInterfaceIdiomPad,
} UIUserInterfaceIdiom;

बस मेरे संदर्भ के लिए:

@property (nonatomic, readonly) BOOL isPhone;

-(BOOL)isPhone {
    return (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone);
}

या #define का उपयोग करें

#define IS_PHONE  (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)

हालांकि, अगर आप अपने कोड पर isPhone का उपयोग कर रहे हैं, तो यह आमतौर पर खराब अभ्यास है। अपने बयानों को निहित रखने के लिए फैक्ट्री पैटर्न और पॉलिमॉर्फिज्म का उपयोग करें, इसलिए आपको फोन या आईपैड के लिए बनाए गए ऑब्जेक्ट मिलते हैं और फिर उन लोगों के साथ काम करते हैं।

जोड़ा गया

मैं अब अपने कोड पर इस समाधान का उपयोग कर रहा हूं। यह आवंटन में एक मानक कारखाना पैटर्न जोड़ता है।

#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 नामक उप-वर्ग TheClassPhone

नोट: चूंकि उद्देश्य-सी में कोई भी एकाधिक विरासत नहीं है, इसलिए आपकी समस्याओं को हल करने के लिए विरासत का उपयोग करना थोड़ा अधिक है (यानी, यदि आपके पास सबक्लास के उप-वर्ग हैं तो यह काम नहीं करता है)। if आपको इसकी आवश्यकता हो if अच्छा कुछ भी नहीं।





uidevice