2011-08-08 119 views
0

我正在開發一個應用程序,我想在iOS4和iOS5上運行,但對於iOS5的用戶,我想使用iOS5功能作爲界面的一部分(iOS4用戶會得到不太令人興奮的東西)。我的問題是檢查設備上特定操作系統的可用性的過程是什麼。我的理解是,我不檢查操作系統版本,而是一個特定的類的可用性,任何人都可以幫助我擺脫最好的方式來做到這一點...檢查操作系統版本上的功能/類別?

+0

此問題已在Google上! :rolleyes: –

+0

@Bo A,非常感謝,感謝您的鏈接。 – fuzzygoat

+0

對此有何更新? –

回答

4

不是iOS 5下的NDA?

總之,要檢查是否有功能存在那就試試這個:

if (NSClassFromString(@"UIStepper")) { 
    //enter code here 
} else { 
    //enter code here 
} 

自定義您的需求。

編輯:iOS 5現在發佈,所以我現在可以添加「UIStepper」我的代碼。

+1

+1提及NDA – Toastor

+1

+1爲NDA提醒,我已經刪除了任何違規。我認爲我不需要擔心iOS5的話(或未來版本),因爲它提到了蘋果的主要公共頁面。 – fuzzygoat

+0

@fuzzygoat - 這不是它的冒犯或任何 - 它只是在NDA保護下。你說得對,提到「iOS 5」這個詞不應該成爲問題。另外,你如何使用'NSClassFromString'? –

2
Class stepperClass = NSClassFromString(@"UIStepper"); 
if (stepperClass) { 
    // class is available, use it 
} else { 
    // class not available, don't use it or use something else 
} 
2

iOS5的是保密協議,所以我難道不提,可能會或可能不存在的任何新類。但是,下面的代碼應該做你想要的。它從docs中解除。

if ([UINewClass class]) { 
    // Create an instance of the class and use it. 

} else { 
    // Alternate code path to follow when the 
    // class is not available. 

} 

這使用弱鏈接,因此需要在您正在使用的SDK中編譯新類(UINewClass)。這是iOS 4.2中引入的一個相對較新的功能,可能不被所有框架支持。一種解決方法是使用老式(從上述同樣的鏈接):

Class cls = NSClassFromString (@"UINewClass"); 
if (cls) { 
    // Create an instance of the class and use it. 
} else { 
    // Alternate code path to follow when the 
    // class is not available. 
} 
+1

+1提及NDA – Toastor

+3

當在iOS <3.1上運行時,「[UISomeNewClass class]」將不起作用,因爲不支持弱鏈接。如果你真的需要支持舊的iOS版本,你需要使用'NSStringFromClass()'。 – gcbrueckmann

+0

@gcbrueckmann:我不知道,謝謝。儘管OP表示他只想支持4和5。 – brain

2

如果你想獲得UIStepper到4.x的正常降級,您不僅可以使用

if(NSClassFromString(@"UIStepper")) 

相反,您還必須檢查具有響應的UIStepper特定的選擇器。哈利木下博的評論所說,做一個好方法是:

if(NSClassFromString(@"UIStepper") && [theStepper respondsToSelector:@selector(setValue:)]) 

這解決了我的應用程序下的iOS 4.x的崩潰問題

哈里伍德幫我解決了我所看到的問題,我希望他能夠獲得這個榮譽。

相關問題