2012-11-18 5 views
0

유니버설 앱을 개발 중이며 iOS 6, iOS 5 및 iPhone 5를 지원하고 싶습니다. 다른 스토리 보드로이 작업을 수행하려하지만 문제는 AppDelegate에서 스토리 보드를 전환하는 방법입니다 .다른 iOS 버전에 다른 스토리 보드 사용하기

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 


     float currentVersion = 6.0; 

     CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size; 

     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion == NO) { 

      if (iOSDeviceScreenSize.height == 480) 
      { 

       UIStoryboard *ios5iphone = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone-ios5" bundle:nil]; 


      } 

      else 
      {UIStoryboard *ios5iphone = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad-ios5" bundle:nil];} 

     } 
return YES; 

    } 

내가 4 스토리 보드가 (아이폰 OS 6 자동 레이아웃 아이폰 4/5,에서 iOS 5에 대한 아이폰 OS 6, IOS 5에 대한 아이폰 4 및 iPad 용 자동 레이아웃과 아이 패드)

내 문제 : 나는이 시도 응용 프로그램을 시작하기 전에 스토리 보드를 전환하는 방법입니다.

오류 : 당신의 오류를 바탕으로

2012-11-18 13:42:42.471 iEveryTech[22902:c07] Unknown class Firs in Interface Builder file. 
2012-11-18 13:42:42.494 iEveryTech[22902:c07] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' 
*** First throw call stack: 
(0x1632052 0xfaed0a 0x15daa78 0x15da9e9 0x43b7d7 0x43b9af 0x43b6b7 0x33c36d 0x1e3e2c 0x1e43a9 0x1e45cb 0x1ffb89 0x1ff9bd 0x1fdf8a 0x1fde2f 0x1fbffb 0x1fc85a 0x1e5fbf 0x1e621b 0x1e70f1 0x155fec 0x15b572 0x15572b 0x144bc2 0x144ce2 0x144ea8 0x14bd9a 0x11cbe6 0x11d8a6 0x12c743 0x12d1f8 0x120aa9 0x17c5fa9 0x16061c5 0x156b022 0x156990a 0x1568db4 0x1568ccb 0x11d2a7 0x11ea9b 0x228d 0x21b5 0x1) 
terminate called throwing an exception(lldb) 
+0

메소드 끝 부분에'return' 문을 넣으십시오. 그리고 당신의 문제가 무엇인지 명확히하십시오. – Mat

+0

@Mat 내 문제는 스토리 보드를 전환하는 방법입니다. –

+1

예.하지만 코드에 어떤 문제가 있는지는 알 수 있습니다. 코드를 실행할 때 어떤 일이 발생합니까? 적어도 하나의 컨트롤러를 볼 수 있습니까? 마지막에 return statement를 넣었습니까? – Mat

답변

3

, 당신은 아마 당신이 목표 요약 설정에서 메인 스토리 보드 설정을 사용하고 iOS 버전 < (6)에 대한 타겟팅 것으로 보인다. here을 볼 수 있듯이, 그는 당신이 성취하고자하는 것을 정확히합니다.
그렇지 않으면 use two target for different versions 수 있습니다.

0

이 내 문제의 soultion @Mat하는

#import "AppDelegate.h" 

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending) 

@interface AppDelegate() 
@property (strong, nonatomic) UIViewController *initialViewController; 
@end 

@implementation AppDelegate 

@synthesize window = _window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size; 

    UIStoryboard *mainStoryboard = nil; 
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")==NO) 


      if (iOSDeviceScreenSize.height == 480) 
      { 

       mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone-ios5" bundle:nil]; 
    } else { 
     mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad-ios5" bundle:nil]; 
    } 

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) 


     if (iOSDeviceScreenSize.height == 480) 
     { 

      mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
     } else { 
      mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 
     } 


    self.initialViewController = [mainStoryboard instantiateInitialViewController]; 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = self.initialViewController; 
    [self.window makeKeyAndVisible]; 



    return YES; 

감사했다!

관련 문제