Сбоит ли iOS 3.0 при использовании методов из iOS 4.0? - PullRequest
0 голосов
/ 17 февраля 2011

Мы создаем приложение, которое работает с адресной книгой iPhone. В версии 4.0 Apple реализовала источники в адресной книге, а также несколько методов для них (для извлечения источников, записи в источник и т. Д.). Эта функциональность отсутствовала в iOS меньше 4.0.

Мы обновили наше приложение, чтобы оно соответствовало 4.0 и 4.2 способам работы с источниками адресной книги, но я не тестировал его на устройстве 3.0.

В целом, не сломается ли приложение, если вы используете более новые методы SDK в более старой версии операционной системы, в которой их нет?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

да, это потерпит крах.Но есть способы предотвратить это.

Вчера я сделал нечто подобное с Event Kit.

Я создал свой собственный объект EventHandler, который возвращает nil в init, если нет Event Kit.Вызовы nil совершенно законны, поэтому этот класс абстракции предотвращает сбои на iOS3.И мне не нужно выполнять проверку NSClassFromString для каждого звонка, который я делаю.

Из-за отсутствия устройств iOS3 я еще не смог проверить это, но я надеюсь, что он будет работать.

- (id)init {
    self = [super init];
    if (self) {
        Class eventKitClass = NSClassFromString(@"EKEventStore");
        if(eventKitClass) {
            // iOS4++
            // more init
        }
        else {
            // iOS3
            [self release];
            return nil;
        }
    }
    return self;
}

Вы должны ослабить связь с фреймворком Event Kit.[Targets / YourTarget / Get Info / General]

РЕДАКТИРОВАТЬ: Я неправильно прочитал ваш вопрос, вы не спрашиваете о наборе событий.Но этот подход работает и для структуры адресной книги.

EDIT2: Поскольку адресная книга была доступна с iOS 2.0, мой подход для вас бесполезен.
Вы должны использовать

if ([foo respondsToSelector:@selector(doSomething:)]) { 
    [foo doSomething:bar]; 
}

для каждого вызова, который выможет не присутствовать в iOS3.Как сказал другой ответчик.

2 голосов
/ 17 февраля 2011

Да, это потерпит крах.

Либо проверьте, какая версия iOS запущено приложением, чтобы определить, использовать ли определенную функциональность или поставить вызовы под вопрос в пределах if ([object respondsToSelector:@selector]) {}.

Если вы не хотите иметь дело с этим и убедитесь, что он никогда не потерпит крах, просто сделайте ваше приложение доступным для iOS 4.0 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...