Xcode는 메인 스토리 보드를 어떻게로드합니까?
스토리 보드를 사용하여 Xcode 4.6에서 새로운 단일보기 응용 프로그램을 만들면 main 함수가 다음과 같은 응용 프로그램 대리자를 사용하여 새 응용 프로그램을 만드는 것을 볼 수 있습니다.
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
그러나 MyAppDelegate.h 및 MyAppDelegate.m을 보면 MainStoryboard.storyboard를 참조하는 코드가 없습니다. 이것은 nib 파일을 프로그래밍 방식으로로드하는 코드 줄을 찾을 수있는 스토리 보드가 아닌 버전과 다릅니다.
제 질문은 스토리 보드가 어떻게로드 되나요? (찾으려면 어디를 찌르면 되나요?)
프로젝트의 대상 설정을 확인하십시오.
메인 스토리 보드 설정을 확인하십시오.
이 작업을 코드에서 직접 수행하려면 다음과 같이 할 수 있습니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *vc = [storyboard instantiateInitialViewController];
// Set root view controller and make windows visible
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
UIApplicationMain 토론을 살펴보십시오 .
토론
이 함수는 주 클래스에서 응용 프로그램 개체를 인스턴스화하고 지정된 클래스에서 대리자를 인스턴스화하고 (있는 경우) 응용 프로그램에 대한 대리자를 설정합니다. 또한 응용 프로그램의 실행 루프를 포함하여 기본 이벤트 루프를 설정하고 이벤트 처리를 시작합니다. 응용 프로그램의 Info.plist 파일이 NSMainNibFile 키와 값에 유효한 nib 파일 이름을 포함하여로드 할 기본 nib 파일을 지정하면이 함수는 해당 nib 파일을로드합니다.
UIApplicationMain 이 호출 되면 모든 애플리케이션 정보가 포함 된 plist 파일이로드됩니다.
이것이 xib / storyboard 파일이로드되어야한다는 것을 "이해"하는 방법입니다.
info.plist 파일의 UIMainStoryboardFile 설정에서 시작됩니다. 그런 다음 Xcode는 기본 창을 만들고 첫 번째 뷰 컨트롤러를 인스턴스화 한 다음 창에 추가합니다. .nib와 유사한 코드에서이 작업을 수행 할 수 있습니다.
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* initialView = [storyboard instantiateInitialViewController];
Swift로 인스턴스화하려는 경우
var storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
var vc : AnyObject! = storyboard.instantiateInitialViewController()
self.window!.rootViewController = vc as UIViewController
self.window!.makeKeyAndVisible()
Xcode에서 기본 스토리 보드를 결정하는 사람이 읽을 수있는 Info.plist 섹션은 다음과 같습니다.
Main storyboard file base name
일반 텍스트에서 키는 UIMainStoryboardFile
다음과 같습니다.
<key>UIMainStoryboardFile</key>
<string>Main</string>
파티에 조금 늦었지만 아래와 같이 창에서 viewController로 이동할 수 있습니다.
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var viewController = window?.rootViewController as? ViewController
if let viewController = viewController {
// do awesome stuff
}
return true
}
}
참고 URL : https://stackoverflow.com/questions/16702631/how-does-xcode-load-the-main-storyboard
'developer tip' 카테고리의 다른 글
int 배열 선언 (0) | 2020.11.28 |
---|---|
소멸자, 폐기 및 종료 방법의 차이점 (0) | 2020.11.28 |
스레드 "main"java.lang.NoClassDefFoundError의 예외 : junit / textui / ResultPrinter (0) | 2020.11.28 |
ID 열이있는 가져 오기 및 내보내기 마법사 (0) | 2020.11.27 |
MySQL 저장 프로시 저는이를 사용하거나 사용하지 않습니다. (0) | 2020.11.27 |