更改不同设备的视图

时间:2014-10-02 14:54:14

标签: ios objective-c iphone xcode uiviewcontroller

我有一个只适用于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文件的过程并且不想使用故事板,任何人都知道为什么会出现这个问题以及如何解决它?

2 个答案:

答案 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

希望这有帮助!