Mam projekt oparty na szablonie aplikacji opartej na nawigacji. W AppDelegate są metody -applicationDidFinishLoading:
i -applicationWillTerminate:
. W tych metodach ładuję i zapisuję dane aplikacji oraz przechowuję je w zmiennej instancji (w rzeczywistości jest to wykres obiektu).
Gdy aplikacja ładuje się, ładuje MainWindow.xib, który ma NavigationConroller, który z kolei ma RootViewController. Właściwość RootViewController nibName
wskazuje na RootView (moja rzeczywista klasa kontrolera).
W mojej klasie chciałbym odnieść się do obiektu, który utworzyłem w -applicationDidFinishLoading:
metodzie, aby uzyskać do niego odniesienie.
Czy ktoś może mi powiedzieć, jak to zrobić? Wiem, jak odwoływać się do obiektów, które utworzyłem programowo, ale nie potrafię znaleźć sposobu, aby wrócić do wątku, biorąc pod uwagę, że środkowy krok został wykonany z pliku NIB.
źródło
Jeśli rozumiem Twoje pytanie, chcesz odwołać się do zmiennych / właściwości członkowskich w obiekcie AppDelegate? Najprostszym sposobem jest użycie [[delegata UIApplication sharedApplication]] w celu zwrócenia odwołania do obiektu.
Jeśli masz właściwość o nazwie window, możesz to zrobić:
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; //do something with mainWindow
źródło
Oto dobrze zdefiniowana przenośna alternatywa dla iOS 4.0 i nowszych:
UIApplication *myApplication = [UIApplication sharedApplication]; UIWindow *mainWindow = [myApplication keyWindow]; UIViewController *rootViewController = [mainWindow rootViewController];
lub w jednej linii
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
Nie zapomnij ustawić właściwości okna
rootViewController
(powiedzmy w IB), bo to zrobi jack.źródło
Zdefiniuj makro i używaj go w dowolnym miejscu!
#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)
W moim kodzie: -
UIViewController *rootViewController = appDelegateShared.window.rootViewController;
źródło