我怎样才能加载固件依赖NIBS?
-
25-09-2019 - |
题
下面是我的问题:
我在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... */
}
不隶属于 StackOverflow