jak uzyskać mój UIWindow za pomocą UIApplication?

Mam tylko jedno okno i próbowałem

UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];
Ale to zwróciło zero.

Ja też próbowałem:

UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];

Ale to wywołało wyjątek i aplikacja została zamknięta, gdy próbowałem wydrukować

[[UIApplication sharedApplication].windows count]

Wydrukowano 0

Uwaga: umieszczam to w metodzie viewDidLoad mojego jedynego kontrolera widoku i jest to całkowicie nowa aplikacja oparta na widoku iPada, więc nic nie zmieniłem, po prostu próbuję uzyskać Okno

Proszę pomóż mi zdobyć ten obiekt

Author: Phlibbo, 2010-09-23

4 answers

Jeśli Twoje główne okno jest wylotem Twojego AppDelegate( co powinno mieć miejsce), możesz po prostu użyć

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
 47
Author: Phlibbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 20:41:55

Najprostszym sposobem jest uzyskanie okna z delegata aplikacji zamiast:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
 33
Author: iwasrobbed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-25 19:25:30

Okno klucza aplikacji nie jest ustawione, dopóki {[1] } nie zostanie wywołane w delegacie aplikacji. Twój UIViewController jest prawdopodobnie ładowany z stalówki przed tym wywołaniem. To wyjaśnia, dlaczego keyWindow zwraca zero.

Na szczęście kontroler widoku nie musi przechodzić przez aplikację, aby uzyskać okno. Można po prostu zrobić:

UIWindow *mWindow = self.view.window;
 20
Author: cduhn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 21:00:00
[[[UIApplication sharedApplication] windows] objectAtIndex:0]; // You can also check the count of this to make sure, because if there are no windows it will crash.
 5
Author: BadPirate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-04 00:21:53