Использование вызовов функций iPhone OS 3.0 вместо устаревших вызовов функций 2.2 на устройствах 2.2 - PullRequest
1 голос
/ 06 января 2010

Если я установлю Base + Active SDK приложения для iPhone на 3.0 и Цель развертывания на 2.2, могу ли я использовать новые версии функций на устройствах 2.2?

Например, UITableViewCell теперь требует, чтобы изображение было установлено с помощью [cell.imageView setImage:image], тогда как в 2.2 вы бы назвали [cell setImage:image]. Будет ли использоваться новый [cell.imageView setImage:image] сбой на 2.2 устройствах?

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Нет, вы не можете использовать вызовы OS 3.0 на 2.2. Устаревший метод должен вести себя как обычно, по крайней мере, в OS 3. Во многих случаях устаревший метод в ОС означает, что Apple рекомендует использовать новые методы, а не устаревшие; но эти методы могут исчезнуть и в будущем.

У вас есть несколько вариантов:

  1. Простое игнорирование предупреждений, если приложение и методы действительно работают в OS 3.0.
  2. Выполните проверку во время выполнения, чтобы определить версию ОС, и вызовите соответствующий метод:

    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 не будет работать

  3. Отказ от поддержки OS 2.2. Для вас вполне разумно ориентироваться только на 3.0, так как уровень 3.X достаточно высок. В случае с моим небольшим приложением в декабре у меня было 27 пользователей в системах до 3.0 из 2058 пользователей. Излишне говорить, что эта опция значительно снижает ваши потребности в тестировании.

1 голос
/ 06 января 2010

Нет, вы не можете использовать вызовы OS 3.0 на устройстве 2.x. Я был бы удивлен, если бы вы могли даже установить приложение, ориентированное на 3.0, на устройство 2.x.

...