2011-02-17 57 views
0

我們正在構建一個處理iPhone通訊錄的應用程序。在4.0版本中,Apple在地址簿中實現了源代碼,並且還有一些方法(用於檢索源代碼,寫入源代碼等)。這個功能在iOS 4.0以下版本中不存在。使用iOS 4.0的方法時,iOS 3.0會崩潰嗎?

我們已經更新了我們的應用程序,以適應大約4.0和4.2處理地址簿來源的方式,但我沒有在3.0設備上進行測試。

一般來說,如果您在較舊版本的操作系統上使用更新的SDK方法,應用程序是否會中斷?

謝謝!

回答

2

是的,它會崩潰。

請檢查應用程序運行在哪個版本的iOS上,以確定是使用某種功能還是將有問題的電話置於if ([object respondsToSelector:@selector]) {}之內。

如果你不想處理這個問題,並確保它永遠不會崩潰,只需讓你的應用程序可用於iOS 4.0和更高版本。

2

是的,它會崩潰。但是有辦法可以防止這種情況發生。

昨天我做了一些類似Event Kit的事情。

我創建了自己的EventHandler對象,如果沒有Event Kit,它將在init中返回nil。調用nil是完全合法的,所以這個抽象類可以防止iOS3上的崩潰。我不需要爲每次打電話都做NSClassFromString檢查。

由於缺少iOS3設備,我無法測試它,但我希望它能正常工作。

- (id)init { 
    self = [super init]; 
    if (self) { 
     Class eventKitClass = NSClassFromString(@"EKEventStore"); 
     if(eventKitClass) { 
      // iOS4++ 
      // more init 
     } 
     else { 
      // iOS3 
      [self release]; 
      return nil; 
     } 
    } 
    return self; 
} 

你必須弱連接Event Kit框架。 [目標/你的目標/獲取信息/一般]

編輯:我誤讀你的問題,你不問有關事件包。但這種方法也適用於地址簿框架。

EDIT2:由於地址簿自iOS 2.0起可用,我的方法對您來說沒用。
你必須使用

if ([foo respondsToSelector:@selector(doSomething:)]) { 
    [foo doSomething:bar]; 
} 

每個調用你做,可能不會出現在IOS3。像其他回答者說的那樣。

+0

無論誰打開這個,必須具有和我一樣的閱讀理解問題^^ – 2011-02-17 10:33:28