Как XCode загружает основную раскадровку?
когда я создаю новое приложение single view в XCode 4.6 с помощью storyboard, мы видим, что основная функция создает новое приложение с помощью делегата приложения следующим образом:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
однако если мы посмотрим на MyAppDelegate.h И MyAppDelegate.m, нет нигде в коде, который ссылается на MainStoryboard.раскадровка. Это отличается от версии без раскадровки, где мы можем найти строку кода, которая загружает файл nib программно.
поэтому мой вопрос это, как загружается раскадровка? (куда я должен ткнуть, чтобы найти его?)
спасибо
6 ответов:
посмотрите на ваши целевые настройки для проекта
обратите внимание на основные настройки раскадровки.
Если бы вы хотели сделать это в коде самостоятельно, вы бы сделали что-то вроде.
- (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 обсуждение:
Обсуждение
Эта функция создает экземпляр объекта приложения из основного класса и экземпляр делегата (если таковой имеется) из данного класса и задает делегат для приложения. Он также настраивает основной цикл событий, включая цикл запуска приложения, и начинает обработку событий. Если информация о приложении.plist file указывает основной файл nib, который будет загружен, включая ключ NSMainNibFile и допустимое имя файла nib для значения, эта функция загружает этот файл nib., когда UIApplicationMain вызывается, загружается файл plist, содержащий всю информацию о приложении:
вот как он "понимает", что файл xib/storyboard должен быть загружен.
Он запускается из параметра UIMainStoryboardFile из вашей информации.plist файл. Затем Xcode создает главное окно, создает экземпляр вашего первого контроллера вида и добавляет его в окно. Вы все еще можете сделать это в коде, похожем на этот .перо с помощью
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, читаемая человеком информация.раздел 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 } }


Comments