दिलचस्प पोस्ट
XCode 5 अपस्टोर सत्यापन पर दुर्घटनाएं क्या जावास्क्रिप्ट में डबल फ्लोटिंग प्वाइंट नंबर सटीक है? फ़ोन नंबर के लिए UITextField नॉट एचटीटीपीएलस्टनर के साथ मल्टी थ्रेडिंग मानचित्रण <esc> vimrc में कारण bizzare arrow व्यवहार एंड्रॉइड एम्यूलेटर में जीपीएस स्थान का अनुकरण कैसे करें? PHP पुनरावर्ती निर्देशिका पथ list.clear () बनाम सूची = नया ArrayList <Integer> (); UIWebView में एक यूट्यूब वीडियो को कैसे चलाएं अपवाद कितना महंगा है टॉमकेट 8 में क्लास-पथ में बाह्य संसाधन जोड़ना तैयार PDO वक्तव्य का उपयोग करके मैं पैरामीटर से कैसे तय कर सकता / सकती हूं? AngularJS अनुप्रयोग फ़ाइल संरचना IE6 में एक (सीएसएस) के आयाम का उपयोग कर छवि स्केलिंग करते समय पहलू अनुपात को कैसे संरक्षित किया जाए? iPhone ऐप स्थानीयकरण – अंग्रेजी समस्याएं?

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

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

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

[[UIDevice currentDevice] model]; 

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

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

 [[UIDevice currentDevice] userInterfaceIdiom]; 

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

Solutions Collecting From Web of "यह निर्धारित करने के लिए एपीआई कि आईफोन या आईपैड पर चल रहे हैं"

चेकआउट UI_USER_INTERFACE_IDIOM

मौजूदा उपकरण द्वारा समर्थित इंटरफ़ेस मुहावरे देता है।

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

UIUserInterfaceIdiom

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

 typedef enum { UIUserInterfaceIdiomPhone, UIUserInterfaceIdiomPad, } UIUserInterfaceIdiom; 

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

 @property (nonatomic, readonly) BOOL isPhone; -(BOOL)isPhone { return (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone); } 

या # परिभाषा का उपयोग करें

 #define IS_PHONE (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone) 

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

जोड़ा गया

मैं अब अपने सभी कोड पर इस समाधान का उपयोग कर रहा हूँ यह alloc में एक मानक फैक्टरी पैटर्न जोड़ता है

 #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 अच्छा नहीं है

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

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

आप निम्न कोड का उपयोग कर iPhone या iPad पर एप्लिकेशन चला सकते हैं या नहीं यह जांच सकते हैं:

 - (NSString *)deviceModel { struct utsname systemInfo; uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; } - (NSString *) platformString { NSString *platform = [self deviceModel]; if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone_2G"; else if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone_3G"; else if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone_3GS"; else if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone_4"; else if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon_iPhone_4"; else if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone_4S"; else if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone_5"; else if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone_5"; else if ([platform isEqualToString:@"iPod1,1"]) return @"iPod_Touch 1G"; else if ([platform isEqualToString:@"iPod2,1"]) return @"iPod_Touch 2G"; else if ([platform isEqualToString:@"iPod3,1"]) return @"iPod_Touch 3G"; else if ([platform isEqualToString:@"iPod4,1"]) return @"iPod_Touch 4G"; else if ([platform isEqualToString:@"iPad1,1"]) return @"iPad_1G"; else if ([platform isEqualToString:@"iPad2,1"]) return @"iPad_2(WiFi)"; else if ([platform isEqualToString:@"iPad2,2"]) return @"iPad_2(GSM)"; else if ([platform isEqualToString:@"iPad2,3"]) return @"iPad_2(CDMA)"; else if ([platform isEqualToString:@"iPad3,1"]) return @"iPad_3"; else if ([platform isEqualToString:@"iPad3,2"]) return @"iPad_3(GSM/CDMA)"; else if ([platform isEqualToString:@"iPad3,3"]) return @"iPad_3(GSM)"; else if ([platform isEqualToString:@"iPad3,4"]) return @"iPad_3(GSM)"; else if ([platform isEqualToString:@"iPad2,5"]) return @"iPad_mini_1G"; else if ([platform isEqualToString:@"i386"]) return @"Simulator"; else if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 

NSClassFromString और एक iPad- विशिष्ट वर्ग का उपयोग करें। यहां और पढ़ें:

http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/StartingYourProject/StartingYourProject.html#//apple_ref/doc/uid/TP40009370-CH9-SW3