2017-08-23 6 views
7

पिछले iOS संस्करण मैं NSFoundationVersionNumber इस्तेमाल किया iOS संस्करण पता लगाने के लिए:NSFoundationVersionNumber आईओएस 11 में - कैसे iOS संस्करण का पता लगाने के प्रोग्राम के रूप में

#define IS_IOS10orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) 
#define IS_IOS9orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_8_3) 
#define IS_IOS8orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) 
#define IS_IOS7orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) 
#define IS_IOS6orHIGHER (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_6_0) 
... 

अब मैं आईओएस 11 के लिए भी ऐसा ही करने के लिए होगा, लेकिन मैं नहीं कर रहा था सही NSFoundationVersionNumber खोजने के लिए। The docs नवीनतम होने के लिए NSFoundationVersionNumber_iOS_9_x_Max दिखाएं।

तो, आईओएस 11 का उपयोग करने के लिए सही NSFoundationVersionNumber सही कैसे है?

उत्तर

11

नामित तरीके प्रणाली संस्करण प्राप्त करने में से एक है UIDevice की systemVersion संपत्ति के साथ है। https://developer.apple.com/documentation/uikit/uidevice/1620043-systemversion?language=objc

एनएसएसटींग * सिस्टमवर्सन = [[यूआईडीवीस वर्तमानडिवाइस] सिस्टम वर्जन];

#define IS_IOS11orHIGHER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0) 
+0

वास्तव में, फ़्लोटिंग पॉइंट अंकगणित के कारण इसके साथ एक गड़बड़ हो सकती है। '[[UIDevice currentDevice] systemVersion] floatValue]' 8.1999998' है मेरे सिस्टम पर। मानक फ्लोट राउंडिंग समस्या, इसलिए यदि मैं 11.2 की तलाश में था तो यह असफल हो जायेगा। –

1

Apple NSProcessInfo

एप्पल अब NSProcessInfo

में NSOperatingSystemVersion struct आप isOperatingSystemAtLeastVersion साथ उपयोग कर सकते हैं :, या बस वास्तव में पता करने के लिए जो सिस्टम संस्करण अपने अनुप्रयोग चल रहा है 3 क्षेत्रों की जांच की जाती है।

यह दोनों obj सी में उपलब्ध है और तेजी से

45

आप Xcode 9 या बेहतर उपयोग कर रहे हैं, तो आप @available विशेषता का उपयोग कर सकते हैं::

आप इसे इस तरह से उपयोग कर सकते हैं

if (@available(iOS 11.0, *)) { 
    NSLog(@"newest"); 
} else { 
    NSLog(@"not newest"); 
} 

स्विफ्ट में, यह एक ही है, लेकिन वर्तनी #available@available के बजाय।

कारण यह है कि यह अन्य तरीकों से ऐसा करने का एक बेहतर तरीका है क्योंकि संकलक इसके बारे में जानता है, और उपलब्धता चेतावनियों को उचित रूप से दबाएगा। तो उपर्युक्त उदाहरण में, आप उन एपीआई का उपयोग कर सकते हैं जिन्हें if ब्लॉक में आईओएस 11.0 में पेश किया गया था, उन एपीआई के बारे में चेतावनी दिए बिना आपके प्रोजेक्ट के परिनियोजन लक्ष्य के लिए अनुपलब्ध है।

+1

मुझे यह नया दृष्टिकोण पसंद है :) – Gomfucius

+0

उपरोक्त मेरी टिप्पणी के अनुसार, स्वीकृत उत्तर में फ्लोट्स का उपयोग करके तुलना के आधार पर एक गोल त्रुटि हो सकती है - हमेशा सूक्ष्म त्रुटियों का स्रोत। आईएमओ यह एक बेहतर तरीका है। –

+0

स्पष्ट होने के लिए, @CharlesSrstka से यह उत्तर सही है और स्वीकार्य उत्तर होना चाहिए, न कि 'systemVersion' की फ्लोट तुलना का उपयोग करके, क्योंकि इससे सूक्ष्म त्रुटियां हो सकती हैं। –

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