2014-10-02 74 views
0

我有一个项目,将只适用于iphone,版本4,5和6.在我的情况我使用xib文件,在这种情况下,我创建了一个名为ViewController与xib文件,然后创建三个文件,厦门国际银行,造成你有以下结构:更改视图为不同的设备

ViewController.h 
ViewController.m 
ViewController.xib 
ViewController4inch.xib 
ViewController47inch.xib 
ViewController55inch.xib 

里面我ViewController.m我把这段代码里面viewDidLoad中,认识到iphone的版本和更改视图以用户:

- (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... 

    } 

} 

不幸的是,这段代码不起作用,我得到了fo llowing错误消息:

Thread1: EXEC_BAD_ACCESS (code = 2, address = 0xbf72bfbc) 

在我的项目的所有意见将通过类来处理ViewController.h/.M

就我而言,我经历的过程做的.xib文件,不希望要使用故事板,任何人都知道为什么会出现这个问题以及如何解决它?

+0

这不是很好的做法。为什么不使用带约束的自动布局? – 2014-10-02 15:07:34

+0

当您在if语句中放置断点并逐步完成时会发生什么?它通过例外在哪条线上? – 2014-10-02 15:09:07

+1

想象一下,如果您尝试在Android应用中执行此操作,会发生什么情况。这是否给你任何洞察力,为什么它可能是一个坏主意? – Greg 2014-10-02 15:19:52

回答

0

您正在初始化viewDidLoad内的视图。此方法始终在初始化过程之后调用。你不能在那里启动视图。

你在哪里初始化ViewController?那时你应该用正确的xib文件名称调用initWithNibName:。然后,呈现viewController。

除此之外,我强烈建议您使用更新的方式来实现此目的。例如,您可以尝试“大小”类,以便为多个设备配置一个故事板。这里:http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift

希望这会有所帮助!

相关问题