Как XCode загружает основную раскадровку?



когда я создаю новое приложение single view в XCode 4.6 с помощью storyboard, мы видим, что основная функция создает новое приложение с помощью делегата приложения следующим образом:



return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));


однако если мы посмотрим на MyAppDelegate.h И MyAppDelegate.m, нет нигде в коде, который ссылается на MainStoryboard.раскадровка. Это отличается от версии без раскадровки, где мы можем найти строку кода, которая загружает файл nib программно.



поэтому мой вопрос это, как загружается раскадровка? (куда я должен ткнуть, чтобы найти его?)



спасибо

534   6  

6 ответов:

посмотрите на ваши целевые настройки для проекта

enter image description here

обратите внимание на основные настройки раскадровки.

Если бы вы хотели сделать это в коде самостоятельно, вы бы сделали что-то вроде.

- (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, содержащий всю информацию о приложении:

enter image description here

вот как он "понимает", что файл 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

    Ничего не найдено.