我正在开发一个使用SDK 4.2构建的通用应用程序,预计可以在3.1到4.2设备上运行。 UIPopOverController用在我的代码中。很少有参考资料对iphone和ipad都很常见。有没有办法让ios 3.1说服,
“如果是3.1设备,请不要包含此xyz.h”。有没有制作3.1的预处理器。 os接受这个声明?
答案 0 :(得分:2)
编译器不会为每个设备版本编译应用程序。所以你不能只为“3.1设备”“排除”xyz.h。但是,您可以检查课程是否可用。
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 = ...;
}
请注意,所有这些都发生在运行时。
答案 1 :(得分:0)
链接3.1中不存在的符号没有坏处。您的目标是确保在3.1设备的执行流程中不会引用这些符号。