下面是我的问题:

我在iOS 3.0平稳运行的应用程序 我已经工作了很长时间将它移植到4.0,并包括新的功能。

我添加使用界面生成器成瘾者。

我知道我有以编程限定它仍然支持3.0设备。 我弱链接的框架。但加载NIB当应用程序发生崩溃。

有没有办法NIB的视固件版本加载? 比方说,我有FirstView.xib和FirstView3X.xib

我如何选择哪一个将取决于固件加载?

由于

PS:这是我在计算器上的第一个问题!

有帮助吗?

解决方案

恭喜你如何加载碎粒你的第一个问题:-)?这是一个好主意,界面分割成几个文件。我通常使用一个独立的笔尖每每个控制器和使用该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]

其他提示

可以从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... */
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top