0

这是我的问题:

我有一个在 iOS 3.0 上运行流畅的应用程序我一直在努力将它移植到 4.0 并包含新功能。

我使用 Interface Builder 添加了 iAd。

我知道我必须以编程方式定义它以仍然支持 3.0 设备。我弱链接了框架。但加载 NIB 时应用程序崩溃。

有没有办法根据固件版本加载NIB?假设我有 FirstView.xib 和 FirstView3X.xib

如何根据固件选择加载哪一个?

谢谢

PS:这是我在 StackOverflow 上的第一个问题!

4

2 回答 2

1

恭喜您提出第一个问题 :-) 您如何加载笔尖?将界面拆分为多个文件是个好主意。我通常为每个控制器使用一个单独的 nib,并使用initWithNibName:bundle:初始化程序加载它们。由于您在此处提供了 nib 名称,因此您可以轻松自定义加载行为。

如果您使用标签栏控制器加载笔尖,您可能会将所有标签放在一个笔尖中。我想我会将标签分成单独的笔尖并以编程方式加载它们:

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]

于 2010-10-24T10:25:36.577 回答
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... */
}
于 2010-10-24T15:57:58.230 回答