Я работаю над универсальным приложением, которое должно работать на iPad и iPhone. Документы Apple iPad говорят использовать UI_USER_INTERFACE_IDIOM()
для проверки, работаю ли я на iPad или iPhone, но наш iPhone 3.1.2 и не определит UI_USER_INTERFACE_IDIOM()
. Таким образом, этот код ломается:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
В Apple SDK Руководство по совместимости они предлагают сделать следующее, чтобы проверить, существует ли функция:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
Это работает, но приводит к предупреждению компилятора: «Сравнение между указателем и целым числом». Покопавшись, я понял, что могу заставить предупреждение компилятора исчезнуть со следующим приведением к (void *)
:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if((void *)UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
У меня такой вопрос: последний блок кода здесь хорошо / приемлемо / стандартная практика? Я не мог найти кого-то, кто делал бы что-то подобное с помощью быстрого поиска, что заставляло меня задуматься, пропустил ли я ошибку или что-то подобное.
Спасибо.