/ / próbuję ustawić okno z appdelegate - ios, objective-c, window, appdelegate

próbuje ustawić okno z appdelegate - ios, cel-c, window, appdelegate

Uczę się celu C, postępując zgodnie zksiążka: Wielki przewodnik po ranczu Nerdów i moja aplikacja ulegają awarii, chociaż kopiuję bezpośrednio z książki i tylko trzy linijki kodu. Oto kod, który powoduje awarię.

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

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

CGRect windowFrame = UIScreen.mainScreen.bounds;
UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame];
[self setWindow:theWindow];


return YES;

}

Wiadomo, że książka zawiera literówki, a inna myśl jest taka, że ​​może niektóre z nich są przestarzałe? Jakakolwiek pomoc mile widziana. Dzięki P

EDYTOWAĆ------------------------------------------------- -------------------------------------------------- --------------------------

Linia powodująca awarię aplikacji to:

[self setWindow: theWindow];

i powód awarii:

"NSInternalInconsistencyException", reason: "Application windows are expected to have a root view controller at the end of application launch"

Zastanawiam się tylko, czy może widoki były konfigurowane w appDelegate, a już nie i dlatego kod, który kiedyś działał, teraz się zawiesza?

Odpowiedzi:

1 dla odpowiedzi № 1

Prawidłowo ustawiasz okno.Problem polega na tym, że musisz przypisać UIViewController do właściwości rootViewController swojego okna w pewnym momencie przed osiągnięciem końca metody didFinishLaunchingWithOptions:.

to znaczy.

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

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

CGRect windowFrame = UIScreen.mainScreen.bounds;
UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame];

UIViewController *viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
theWindow.rootViewController = viewController;

[self setWindow:theWindow];


return YES;
}
@end

0 dla odpowiedzi nr 2

Nie powinieneś nigdy ustawiać okna, chyba żedecydujesz się na użycie wielu okien. Wraz z wprowadzeniem scenorysów po prostu ustaw pierwszy kontroler widoku jako kontroler główny, a ten kontroler widoku załaduje się automatycznie


0 dla odpowiedzi № 3

Myślę, że chodzi o to, że potrzebujesz kontrolera widoku na końcu pliku wykonywalnego AppDelegate, aby aplikacja pokazywała coś użytkownikowi.

Musisz ustawić początkowy kontroler widoku na Storyboard („Oczekuje się, że okna aplikacji będą miały główny kontroler widoku na koniec uruchamiania aplikacji” -> Twój komunikat o błędzie)

Na przykład:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YOURSTORYBOARDNAME" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];

Mam nadzieję, że to się przyda.