2009-06-27 104 views
4

我剛剛安裝了iPhone SDK 3.0,發現UITableViewCell的text屬性不再使用,應該使用textLabel.text代替。這是否意味着我必須知道當前的系統版本並調用相應的方法?喜歡這個。iPhone SDK 3.0比。 2.2.1

UITableViewCell *cell = ...; 
if ([[[UIDevice currentDevice] systemVersion] isEqualToString:@"3.0"]) { 
    cell.textLabel.text = @"..."; 
} else { 
    cell.text = @"..."; 
} 

如果是這樣,那將是非常煩人的。

回答

3

只需構建3.0,不用擔心2.2了。與主要的操作系統升級不同,人們非常迅速地升級到新版本的iPhone操作系統。看看TapBots博客上的這篇文章:iPhone 3.0 Adoption Rate

當你的應用程序獲得批准(從現在起2周+某些?)幾乎沒有人會使用2.2了!

+0

嗨,這可以用來devlop通用應用http://cocoabugs.blogspot.com/2010/09/utility-method-to-know-ios4-installed.html – 2010-09-07 13:25:14

1

您可以使用3.0 SDK並在您的項目上定位較舊的版本,如2.2或2.2.1。

爲此,您將Base SDK設置爲3.0,但更改iPhone OS部署目標設置。如果您在項目上獲取信息,這兩個設置都可以訪問。

0

實際上,我不認爲你必須這樣做,因爲當你建立你的項目時,你選擇了它的目標固件,如提到的pgb。那麼你可以簡單地使用#ifdef指令。下面是詳細信息:iPhone check firmware version一個更完整的答案被張貼在這裏:How to target a specific iPhone version?

編輯UIDevice Docs:我意識到,systemVersion實際上是一個字符串,源後取出一些文本。

如果將在整個項目中的各種文件中使用它,那麼你也許可以把它加爲一個屬性到您的appdelegate組織它,和他們做這樣的事情檢索值:

MyAppDelegate *theDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSString *version = theDelegate.version; 

但這可能太過複雜,因爲版本號這麼簡單。

4

而不是檢查服務器操作系統版本,您可以檢查電池具有新的屬性:

if ([cell respondsToSelector:@selector(textLabel)]) { 
    // Do it the 3.0 way 
    cell.textLabel.text = @"..."; 
} else { 
    // Do it the 2.2 way, but avoid deprecation warning 
    [cell performSelector:@selector(setText:) withObject:@"..."]; 
} 
1

它棄用,他們提出的新的方式,但你肯定,如果你想仍然可以使用2.2方式並且它不會對在3.0上運行的應用程序產生負面影響。如果你擔心用戶仍然在2.2,請確認鏈接ben提供。如果您編譯爲3.0,我認爲這不是什麼大問題。

0

如果您現在決定堅持使用2.2,請務必使用3.0在模擬器中進行測試。我們已經看到2.2和3.0之間奇怪的行爲差異,特別是在表格中。