3.1 до 4.2 универсальные проблемы - PullRequest
0 голосов
/ 17 февраля 2011

Я занимаюсь разработкой универсального приложения, созданного с использованием SDK 4.2 и рассчитанного на работу с устройствами с 3.1 по 4.2.UIPopOverController используется в моем коде.Есть несколько ссылок, которые являются общими для iphone и ipad.Есть ли способ заставить ios 3.1 убедить,

«Не включайте этот xyz.h, если это устройство 3.1».Есть ли препроцессор, который делает 3.1.ос принять это утверждение?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Компилятор не компилирует приложение для каждой версии устройства.Таким образом, вы не можете просто «исключить» xyz.h для устройств 3.1.Однако вы можете проверить, доступны ли классы.

Class popoverClass = NSClassFromString(@"UIPopoverController");
if(popoverClass) {
    // class is available
    UIPopoverController *popover = ...
} 
else {
    // use alternate method
    [self presentModalViewController:vc animated:YES];
} 

или можете применить другую логику к iphone или ipad

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // do something that will only be done on ipad
}
else {
    // do something that will only be done on iphone
}

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

NSURL *fileURL = nil;
if ([NSURL respondsToSelector:@selector(fileURLWithPathComponents:)]) {
    fileURL = [NSURL fileURLWithPathComponents:...];
}
else {
    /* another method to create fileURL */
    fileURL = ...;
} 

Обратите внимание, что все это происходит во время выполнения.

0 голосов
/ 17 февраля 2011

Нет ничего плохого в связывании символов, которых нет в 3.1. Ваша цель - убедиться, что на эти символы не будут ссылаться во время выполнения на устройствах 3.1.

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