Как ссылаться на перечисления iOS 4.0 только в проекте с целью развертывания <4.0? - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь написать приложение для iOS, которое будет использовать функции iOS 4.0, но также будет работать на более ранней версии ОС (3.1.3). Я установил цель развертывания 3.1.3, а базовый SDK - 4.3 (последний)

В частности, я пытаюсь воспользоваться возможностью перехвата команд с пульта дистанционного управления.

Приведенный ниже документ очень полезен для объяснения того, как (во время выполнения) проверять наличие классов и методов, но я все еще получаю ошибку компилятора при попытке ссылки на перечисление из класса UIEvent, который появляется только в iOS 4.0 и более поздние версии.

http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW3

Вот фрагмент кода, который приводит к сбою компиляции:

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {   
    if (receivedEvent.type == UIEventTypeRemoteControl) {
        switch (receivedEvent.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                [self playPauseAction:nil];
                break;
            case UIEventSubtypeRemoteControlPreviousTrack:
                [self previousChapter:nil];
                break;
            case UIEventSubtypeRemoteControlNextTrack:
                [self nextChapter:nil];
                break;
            default:
                break;
        }
    }
}

Компилятор жалуется, что:

error: 'UIEventTypeRemoteControl' undeclared (first use in this function)

UIEventTypeRemoteControl - это перечисление, которое не определено до 4.0 (из UIEvent.h)

typedef enum {
    UIEventTypeTouches,
    UIEventTypeMotion,
    UIEventTypeRemoteControl,
} UIEventType;

typedef enum {
    // available in iPhone OS 3.0
    UIEventSubtypeNone                              = 0,

    // for UIEventTypeMotion, available in iPhone OS 3.0
    UIEventSubtypeMotionShake                       = 1,

    // for UIEventTypeRemoteControl, available in iOS 4.0
    UIEventSubtypeRemoteControlPlay                 = 100,
    UIEventSubtypeRemoteControlPause                = 101,
    UIEventSubtypeRemoteControlStop                 = 102,
    UIEventSubtypeRemoteControlTogglePlayPause      = 103,
    UIEventSubtypeRemoteControlNextTrack            = 104,
    UIEventSubtypeRemoteControlPreviousTrack        = 105,
    UIEventSubtypeRemoteControlBeginSeekingBackward = 106,
    UIEventSubtypeRemoteControlEndSeekingBackward   = 107,
    UIEventSubtypeRemoteControlBeginSeekingForward  = 108,
    UIEventSubtypeRemoteControlEndSeekingForward    = 109,
} UIEventSubtype;

Так, как мне остановить компилятор, жалующийся на это?

Также - как мне остановить предупреждения компилятора о том, что someClass может не отвечать на someMethod (где я проверяю во время выполнения, действительно ли этот класс отвечает на метод перед его вызовом.) Я полагаю, что мог бы отключить это предупреждение в настройки компилятора, но в других случаях это полезное предупреждение.

Спасибо

1 Ответ

3 голосов
/ 21 сентября 2011

ОК - вот что я обнаружил:

  1. При переключении deploy_target на 4.3, а затем на 3.1.3 появляются ошибки компиляции и предупреждения.

  2. Как только они появятся, вы можете избавиться от них путем компиляции по схеме симулятора.

  3. Как только вы это сделаете, вы можете скомпилировать, используя реальную схему устройства, и ошибки и предупреждения исчезнут.

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