我有一个只适用于iphone的项目,适用于版本4,5和6.在我的情况下,我使用的是xib文件,在这种情况下,我使用xib文件创建了一个名为ViewController的类,然后再创建了三个xib文件,导致您具有以下结构:
ViewController.h
ViewController.m
ViewController.xib
ViewController4inch.xib
ViewController47inch.xib
ViewController55inch.xib
在我的ViewController.m中,我将此代码放在ViewDidLoad中,以识别iphone的版本并将视图更改为User:
- (void)viewDidLoad {
[super viewDidLoad];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
ViewController *extratoVC = [[ViewController alloc] init];
if([UIScreen mainScreen].bounds.size.height == 480){
// 4-4s
extratoVC = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
}
if([UIScreen mainScreen].bounds.size.height == 568){
// 4-inch
extratoVC = [[ViewController alloc] initWithNibName:@"ViewController4inch" bundle:nil];
}
if([UIScreen mainScreen].bounds.size.height == 667){
// 4.7-inch
extratoVC = [[ViewController alloc] initWithNibName:@"ViewController47inch" bundle:nil];
}
if([UIScreen mainScreen].bounds.size.height == 736){
// 5.5-inch
extratoVC = [[ViewController alloc] initWithNibName:@"ViewController55inch" bundle:nil];
}
[self presentViewController:extratoVC animated:YES completion:nil];// this line causing problem that you see below...
}
}
不幸的是,这段代码不起作用,我收到以下错误消息:
Thread1: EXEC_BAD_ACCESS (code = 2, address = 0xbf72bfbc)
在我的项目中,所有视图都将由类 ViewController.h / .m
处理在我的情况下,我正在完成.xib文件的过程并且不想使用故事板,任何人都知道为什么会出现这个问题以及如何解决它?
答案 0 :(得分:0)
这是不好的做法。但是,如果要查找代码中断的位置,可以添加异常断点。像这里解释:https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html
答案 1 :(得分:0)
您正在初始化viewDidLoad
内的视图。始终在初始化过程之后调用此方法。你不能在那里初始化视图。
你在哪里初始化 ViewController ?此时,您应该使用正确的xib文件名调用initWithNibName:
。然后,呈现viewController。
除此之外,我强烈建议您使用更新的方式来实现这一目标。例如,您可以尝试使用Size类,这样您就可以为多个设备配置一个故事板。这里:http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift。
希望这有帮助!