Как проверить наличие постоянной при создании универсального бинарного файла iPhone - PullRequest
2 голосов
/ 29 июля 2010

Я пытаюсь создать универсальный двоичный файл, который поддерживает многозадачность на iPhone 4 и все еще может работать на iPad.

Я знаю, как избежать ошибок компиляции для разных версий iPhone IOS, проверяя, есликласс существует с использованием NSClassFromString и "responseToSelector", но есть ли способ проверить наличие констант, таких как UIBackgroundTaskInvalid?

Я, конечно, могу использовать #IFDEF, но я хочу избежать этого.

Ответы [ 3 ]

2 голосов
/ 29 июля 2010

Вы делаете это следующим образом:

if (NULL != &UIBackgroundTaskInvalid) {
   //do multitasking stuff here
} else {
   // don't do multitasking stuff here.
}

Как правило, вы хотите проверить, существует ли адрес этой переменной.

Обновление : Для ясности, вына самом деле нельзя использовать #ifdef для этого, так как вы будете собирать с версией SDK, содержащей символы.

1 голос
/ 29 июля 2010

Предпочтительным методом проверки многозадачности iOS является проверка того, отвечает ли UIDevice на isMultitaskingSupported, например:

//----------------------------------------------------------------------
// returns YES if multitasking is available (iOS 4.0 or >)
//----------------------------------------------------------------------
BOOL hasMultitasking() 
{
    UIDevice* device = [UIDevice currentDevice];
    if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
        return [device isMultitaskingSupported];
    }
    return NO;
}

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

1 голос
/ 29 июля 2010

Вероятно, достаточно проверить существование метода, который, как вы знаете, связан с константой.

...