这是我的问题:
我在iOS 3.0上有一个运行顺畅的应用程序 我已经工作很长时间将它移植到4.0并包含新功能。
我使用Interface Builder添加了iAd。
我知道我必须以编程方式定义它仍然支持3.0设备。 我弱了链接框架。但是加载NIB时应用程序崩溃了。
根据固件版本,有没有办法加载NIB? 假设我有FirstView.xib和FirstView3X.xib
如何根据固件选择加载哪一个?
谢谢
PS:这是我在StackOverflow上的第一个问题!
答案 0 :(得分:1)
祝贺你的第一个问题:-)如何加载笔尖?将接口拆分为多个文件是个好主意。我通常为每个控制器使用一个单独的笔尖,并使用initWithNibName:bundle:
初始化程序加载它们。由于您在此处提供了笔尖名称,因此您可以轻松自定义加载行为。
如果使用标签栏控制器加载笔尖,则可能在一个笔尖中包含所有标签。我想我会将标签分成单独的笔尖并以编程方式加载它们:
id tab1 = [[UIViewController alloc] initWithNibName:@"Tab1" bundle:nil];
id tab2 = [[UIViewController alloc] initWithNibName:@"Tab2" bundle:nil];
id tab3 = [[UIViewController alloc] initWithNibName:@"Tab3" bundle:nil];
[tabBarController setViewControllers:[NSArray arrayWithObjects:
tab1, tab2, tab3, nil]];
由于您现在可以控制笔尖名称,因此您可以轻松检测固件版本并加载正确的笔尖:
id tab1 = [[UIViewController alloc] initWithNibName:
[self nibNameForCurrentFirmware] bundle:nil];
至于固件版本检测本身,我认为您可以使用[UIDevice systemVersion]。
答案 1 :(得分:1)
您可以从UIDevice
对象中提取当前版本:
NSString *osVersion = [[UIDevice currentDevice]systemVersion];
NSArray *ver = [osVersion componentsSeparatedByString:@"."];
如果您对比较单个值的字符串感到满意(例如[[ver objectAtIndex:0] isEqualToString:@"3"]
)。您可能希望将版本号转换为整数,以便比较范围(例如osMajor >= 4
)。
您还可以检查某些类是否存在,并根据以下内容加载相应的NIB:
if (NSClassFromString(@"MKMapView") != nil) {
/* Do map stuff... */
}