2011-09-18 2 views
0

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

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

При тестировании слабой привязки структуры UIKit я должен быть уверен в компиляторе LLVM 2.1 и сделать рамки UIKit «Необязательно» в «Целевая -> Сборка фаз -> Ссылка на двоичные файлы с библиотеками». (Насколько я понимаю, это способ сделать это в Xcode 4.1).

Выполнение кода

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

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

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

ответ

-2

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

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

Спасибо за ответ, я уверен, что ваше предложение работает. Однако не все дело в слабой связи и тестировании классов, которые вы должны проверить только на те функции, которые вы собираетесь использовать, и как таковые не предполагаете, на каких (возможно будущих) устройствах будет присутствовать (будет). По этой причине я действительно хочу протестировать функциональность, а не на устройство. – Jonas

0

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

+0

Спасибо за этот поясняющий пункт. В конце я использовал метод тестирования для UIUserInterfaceIdiomPad - и это работает, как я ожидаю. У меня как-то сложилось впечатление от документации Apple, что лучшей практикой было тестирование на существование класса (и это, в частности, класс UIPopoverController вообще не существовал на iPhone). – Jonas

 Смежные вопросы

  • Нет связанных вопросов^_^