wake-up-neo.com

Wie lädt Xcode das Haupt-Storyboard?

Wenn ich eine neue Einzelansicht-Anwendung in Xcode 4.6 mithilfe des Storyboards erstellt habe, können wir feststellen, dass die Hauptfunktion eine neue Anwendung mit dem Anwendungsdelegat wie folgt erstellt:

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

Wenn wir jedoch MyAppDelegate.h und MyAppDelegate.m betrachten, befindet sich im Code nirgendwo ein Verweis auf MainStoryboard.storyboard. Dies unterscheidet sich von einer Nicht-Storyboard-Version, in der wir die Codezeile finden, mit der die Nib-Datei programmgesteuert geladen wird.

Meine Frage ist also, wie das Storyboard geladen wird. (Wo soll ich stoßen, um es zu finden?)

61
agro1986

Sehen Sie sich Ihre Zieleinstellungen für das Projekt an

enter image description here

Beachten Sie die Main Storyboard-Einstellung.

Wenn Sie dies im Code selbst tun möchten, würden Sie so etwas tun.

- (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;
}
71
Chris Wagner

Schauen Sie sich die UIApplicationMain -Diskussion an: 

Diskussion
Diese Funktion instanziiert das Anwendungsobjekt aus der Prinzipalklasse, instanziiert den Delegaten (falls vorhanden) aus der angegebenen Klasse und legt den Delegaten für die Anwendung fest. Es richtet auch die Hauptereignisschleife ein, einschließlich der Ausführungsschleife der Anwendung, und beginnt mit der Verarbeitung von Ereignissen. Wenn die Info.plist-Datei der Anwendung eine zu ladende Hauptnibendatei angibt, indem der NSMainNibFile-Schlüssel und ein gültiger Nib-Dateiname für den Wert hinzugefügt werden, lädt diese Funktion diese Nib-Datei.

Beim Aufruf von UIApplicationMain wird eine Plist-Datei mit allen Anwendungsinformationen geladen: 

enter image description here

So "versteht" es, dass die Xib/Storyboard-Datei geladen werden muss.

9
Ramy Al Zuhouri

Es wird von der UIMainStoryboardFile-Einstellung aus Ihrer info.plist-Datei gestartet. Xcode erstellt dann ein Hauptfenster, instantiiert den ersten View-Controller und fügt ihn dem Fenster hinzu. Sie können dies immer noch in einem Code tun, der dem von .nib ähnelt 

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* initialView = [storyboard instantiateInitialViewController];
7
zimmryan

Wenn Sie mit Swift instanziieren möchten

var storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
var vc : AnyObject! = storyboard.instantiateInitialViewController()
self.window!.rootViewController = vc as UIViewController
self.window!.makeKeyAndVisible()
3
Beanwah

In Xcode besteht der für Menschen lesbare Abschnitt Info.plist, der das Haupt-Storyboard bestimmt:

Main storyboard file base name

Im Klartext lautet der Schlüssel UIMainStoryboardFile:

<key>UIMainStoryboardFile</key>
<string>Main</string>
2
pkamb

Etwas spät zur Party, aber Sie können den viewController aus dem Fenster wie unten gezeigt aufrufen

@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
    }
}
0
Tien Dinh