2012-05-12 28 views
1

我的代碼中有一個類(姑且稱之爲myRefLib)從UIReferenceLibraryViewController(UIKit框架的一部分)繼承了這是一類是僅在iOS中使用5及以上。我想要有一個iOS 3.2的部署目標。從弱鏈接的iOS類或類繼承不是在部署目標的iOS版本

如果我只是創建一個UIReferenceLibraryViewController的實例,我理解我可以使用基本的SDK 5,然後在運行包含它的任何代碼之前測試該類是否與[UIReferenceLibraryViewController類]一起存在。但是如果我從班上繼承,我該怎麼做呢?

的問題是,我必須#包括對我的代碼將使用它的部分繼承類myRefLib - 但有沒有辦法做到有條件在運行時。另外,也沒有辦法從myRefLib中的UIReferenceLibraryViewController有條件地繼承。我還想讓myRefLib的一個實例成爲另一個類的屬性 - 再次,我如何有條件地執行該運行時?

任何幫助非常讚賞...

d

回答

1

嗯,首先,你必須知道你將會更早的操作系統上運行時該怎麼做。基本上,您必須像編寫iOS 3.2 SDK一樣編寫代碼。只有這樣您才能使用更新的功能添加可選的增強功能。

用最簡單的事情開始:你不需要類接口的聲明,以聲明變量,包括實例變量,作爲指針指向這個類。您只需要一個前向聲明:

@class SomeClass; 
SomeClass* foo; 

接下來,導入定義您的類的頭文件應該沒有問題。這是編譯時的事情,你認爲這是一個問題,但這意味着它不受運行時環境的影響。它會編譯,因爲你正在構建iOS 5.0 SDK。

您必須注意的事情是不要使用該類如果不可用。您已經知道如何檢查:測試[SomeClass class]是否返回Nil。如果是這樣,不要實例化你的自定義子類。

最後,你提到的「有條件地運行時從UIReferenceLibraryViewController在myRefLib繼承」。你爲什麼認爲你需要這樣做?如果UIReferenceLibraryViewController不可用,那麼想使用myRefLib哪個子類就沒什麼意義了。如果您有一些不依賴於UIReferenceLibraryViewController的替代實施方案,請另行製作一個課程。然後有條件地選擇myRefLib和這個其他班級取決於可用性。

+0

謝謝你。如果沒有解決#include問題,我提出條件繼承的唯一原因是作爲替代。您的帖子也引導我到這裏,進入一些細節:http://www.marco.org/2010/11/22/supporting-older-versions-of-ios-while-using-new-apis ...顯示可以繼承,包含並指向缺少的類,只要滿足某些條件並提供您未實例化即可。 – delany

+0

噢,也類方法[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:STR]返回nil而不如果UIReferenceLibraryViewController類不存在崩潰。因此,對於這個特定的類,如果您在實例化之前已經檢查了存在的單詞(並且滿足上述條件),則看起來不需要爲舊版本更改任何代碼。雖然我認爲dictionaryHasDefinitionForTerm的行爲不能保證在未來的iOS版本中繼續 - 所以最好也添加一個[UIReferenceLibraryViewController類]檢查。 – delany