2009-06-27 2 views
4

Я только что установил iPhone SDK 3.0 и обнаружил, что текстовое свойство UITableViewCell больше не используется, и вместо этого следует использовать textLabel.text. Означает ли это, что я должен знать текущую версию системы и вызывать соответствующий метод? как это.iPhone SDK 3.0 Vs. 2.2.1

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

Если это так, это было бы очень неприятно.

ответ

3

Просто установите для версии 3.0 и не волнуйтесь об 2.2 больше. В отличие от крупных обновлений ОС, люди очень быстро обновлялись до новой версии iPhone OS. Посмотрите эту запись в блоге TapBots: iPhone 3.0 Adoption Rate.

К тому моменту, когда ваше приложение будет одобрено (через 2 недели + некоторые?), Почти никто не будет использовать 2.2 больше!

+0

hi это можно использовать для универсального приложения devlop http://cocoabugs.blogspot.com/2010/09/utility-method-to-know-ios4-installed.html – 2010-09-07 13:25:14

1

Вы можете использовать SDK 3.0 и использовать более старую версию для своих проектов, например, 2.2 или 2.2.1.

Для этого установите базовый SDK на 3.0, но измените настройку целевого назначения развертывания iPhone OS. Обе настройки доступны, если вы получаете информацию о проекте.

0

На самом деле, я не думаю, что вам нужно это делать, потому что, когда вы строите свой проект, вы выбираете, на какую микропрограмму он нацелен, например, как указано в pgb. Затем вы можете просто использовать директивы #ifdef. Здесь больше информации: iPhone check firmware version Гораздо более тщательный ответ размещен здесь: How to target a specific iPhone version?

EDIT: Я удалил текст после того, как понял, что SystemVersion на самом деле является строка, источник: UIDevice Docs.

Если вы будете использовать его в различных файлах через свой проект, то вы можете, возможно, организовать его, добавив его как свойство вашего 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, особенно с таблицами.

Смежные вопросы