Проблема с обнаружением доступности класса UIPopoverController при работе на симуляторе iPhone - PullRequest
0 голосов
/ 18 сентября 2011

Я работаю над универсальным приложением, которое использует UIPopoverController для версии iPad. (И базовый SDK, и цели развертывания - iOS 4.3)

Когда я использую симулятор iPhone (версия 4.3) для тестирования путей условного кода для iPad и iPhone, ни слабое связывание, ни подход NSClassFromString(@"UIPopoverController") не дают ожидаемого поведения.

При тестировании слабого связывания фреймворка UIKit, я обязательно использую компилятор LLVM 2.1 и сделаю фреймворк UIKit «Необязательным» в «Target-> Build Phases-> Link Binary with Libraries». (Как я понимаю, это можно сделать в Xcode 4.1).

Запуск кода

if ([UIPopoverController class]) { 
...
_popover = [[UIPopoverController alloc] initWithContentViewController:controller];
...
}

на симуляторе iPhone вылетает приложение, указывающее, что [UIPopoverController class] не возвращает nil. Замена [UIPopoverController class] на NSClassFromString(@"UIPopoverController") выше, приводит к тому же самому отказу.

Кто-нибудь знает, как заставить эти условные проверки работать при работе на симуляторе?

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Класс UIPopoverController существует как часть iOS, начиная с версии 3.2, поэтому он не должен возвращать ноль на любом устройстве с iOS версии 4.x, даже на iPhone, только iPhone с iOS 3.1.3 и ниже, вы получаете ноль со слабой (необязательной) связью. Чтобы определить, можете ли вы использовать этот класс, попробуйте предложенное выше решение с userInterfaceIdiom.

0 голосов
/ 18 сентября 2011

Попробуйте определить, работает ли код на iPad.
Если это так, вы можете безопасно использовать UIPopoverController.

- (BOOL)isPad
{
    if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)])
    {
        return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
    }
    else
    {
        return NO; // all iPad OS's implement -userInterfaceIdiom
    }
}
...