2010-05-28 44 views
0

問題:我的應用程序必須在iPhone OS 3.0上運行。如何在iPhone OS 3.0應用程序中使用iPhone OS 3.2功能?

但是,我確實希望使用iPhone OS 3.2的某些功能。就像一個免費的小插件一樣。但我不想通過這樣做切斷我的用戶羣。

想象一下,你是一個iPhone OS 3.0的東西,有人給你一本書閱讀。它有iPhone OS 3.2的說明。你從來沒有學過這些。所以你會怎麼做?崩潰?他們必須隱藏起來,所以你不會感到困擾。

最近有人寫了這樣:

記住,你必須檢查 在源 代碼的地方版本,你喜歡用 的新功能,並提供替代品 舊的操作系統版本

那麼我該怎麼做?當Xcode發現無法從任何地方連接的東西時,會不會引發警告?我是否會檢查操作系統版本並動態鏈接 - 不知何故 - 我認爲很酷的東西?

回答

4

這兩種檢測功能的常用方法是respondsToSelectorNSClassFromString。有了這些,你可以判斷舊的類是否有新的方法,或者是否存在新的類。

例如,3.2添加了手勢識別器。你可以使用這些方法中的任何一個決定,如果你想手勢識別器添加到視圖:

if ([myView respondsToSelector:@selector(addGestureRecognizer:)]) { 
    // assume gesture recognizers exist, create and add some 
} 

if (NSClassFromString(@"UIGestureRecognizer")) { 
    // assume gesture recognizers exist, create and use some 
} 

在這兩種情況下,你會建立3.2,但只使用3.2功能如果它們在運行時被檢測到。如果您針對3.0構建並且所有警告顯示在您正在檢查內容的地方,那麼您很有可能會去。

在3.2的情況下,還添加了一個新的處理器,所以要麼爲舊的架構構建通用二進制文件或構建通用二進制文件。

此外,在某些情況下,Apple提供檢測版本的支持。一個很好的例子是UI_USER_INTERFACE_IDIOMUIDevice.h它爲你調用respondsToSelector

+0

但是當我這樣做,Xcode抱怨方法調用使用未知的符號。有一個很大的紅色警告。 – dontWatchMyProfile 2010-05-30 11:51:56

+0

您針對3.2 SDK構建正常使用。當您針對3.0 SDK進行構建時,只需檢查所有警告是否顯示在預期位置,您只能在傳遞respondsToSelector或NSClassFromString或其他內容後才能觸及。 – drawnonward 2010-05-30 18:16:03

+0

因此,當我希望我的應用程序運行在iPhone OS 3.0(我必須爲3.0構建時,對吧?),那麼我將不得不忍受警告? – dontWatchMyProfile 2010-06-01 15:27:30

4

iPad Programming Guide中有一節討論了題爲「添加運行時檢查新符號」的內容。基本上,您可以使用NSClassFromStringinstancesRespondToSelector:來確定功能是否存在,然後應用程序可以採取相應措施。