不,你不能在我們的OS 3.0調用2.2。至少在操作系統3中,棄用的方法應該是正常的。在許多情況下,在操作系統中棄用,只是表示蘋果推薦使用新方法而不推薦使用新方法;但這些方法也可能在未來消失。
您有幾種選擇:
- 根本無視警告,只要應用程序和方法上的OS 3.0的實際工作。
有一個運行時檢查,以確定操作系統版本,並調用適當的方法:
double version = [[[UIDevice currentDevice] systemVersion] doubleValue];
if (version >= 3.0) {
[cell.imageView setImage:image];
} else {
[cell setImage:image];
}
或更好:
if ([cell respondsToSelector:@selector(imageView)]) {
[cell.imageView setImage:image];
} else {
[cell setImage:image];
}
注意,編譯時檢查,使用ifdef
指令贏得」 t工作
刪除OS 2.2支持。由於3.X的吸收率相當高,因此您僅以3.0爲目標是相當合理的。在我的小應用程序中,在12月份,我有2,058位用戶使用3.0系統之前的27位用戶。不用說,這個選項可以顯着減少您的測試需求。
不夠公平 - 我希望在部署目標被適當設置時,系統會在編譯時挑選新的函數調用。我個人更喜歡使用'if([cellrespondsToSelector:@selector(imageView)])'作爲我的運行時檢查,但我確定這是一個偏好問題;) – Ted 2010-01-06 13:06:08
我加了你的建議。 respondsToSelector肯定比操作系統檢查我的意見更好,只是忘了它! Objective-C是一種動態語言,因此在編譯時方法不會得到解決。 – notnoop 2010-01-06 13:11:33
不錯的。我仍然好奇,但是會[''cell.imageView setImage:image]'剛剛在運行時崩潰了2.2?不幸的是,我沒有2.2設備進行測試。 – Ted 2010-01-06 13:18:49