Нет, вы не можете использовать OS 3.0 на 2.2. Устаревший метод должен вести себя как обычно, по крайней мере, в ОС 3. Устаревание во многих случаях в ОС просто означает, что Apple рекомендует использовать новые методы, а не устаревшие; но эти методы могут исчезнуть и в будущем.
У вас есть несколько вариантов:
- Просто игнорируя предупреждения, до тех пор, как приложение и методы действительно работают на 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
директивы выиграли» т работы
Снижение OS 2.2 поддержка. Для вас вполне разумно ориентироваться только на 3,0, так как потребление 3,8 довольно велико. В случае с моим маленьким приложением в декабре у меня было 27 пользователей в системах до 3.0, из 2058 пользователей. Излишне говорить, что этот вариант значительно снижает потребность в тестировании.
Достаточно честный - я надеялся, что система будет сортировать вызовы новых функций во время компиляции, когда целевая установка развертывания была надлежащим образом установлена. Лично я бы предпочел использовать 'if ([cell responsesToSelector: @selector (imageView)])' в качестве моей проверки времени выполнения, но я уверен, что это вопрос предпочтения;) – Ted
Я добавил ваше предложение. AnswersToSelector, безусловно, лучше, чем ОС проверить мое мнение тоже, просто забыл об этом! Objective-C - динамический язык, поэтому методы не решаются во время компиляции. – notnoop
Ницца. Тем не менее, мне все же интересно, будет ли '[cell.imageView setImage: image]' просто разбит во время выполнения на 2.2? К сожалению, у меня нет 2,2 устройства для тестирования. – Ted