IT story

AppDelegate 인스턴스 변수 참조

hot-time 2020. 9. 17. 18:57
반응형

AppDelegate 인스턴스 변수 참조


탐색 기반 애플리케이션 템플릿을 기반으로하는 프로젝트가 있습니다. AppDelegate에는 메서드 -applicationDidFinishLoading:-applicationWillTerminate:. 이 메서드에서 저는 애플리케이션 데이터를로드 및 저장하고 인스턴스 변수에 저장합니다 (실제로는 객체 그래프입니다).

응용 프로그램이로드되면 NavigationConroller가있는 MainWindow.xib를로드하고 차례로 RootViewController를 갖습니다. RootViewController nibName속성은 RootView (실제 컨트롤러 클래스)를 가리 킵니다.

내 수업에서 -applicationDidFinishLoading:메서드 에서 만든 객체를 참조하여 참조를 얻고 싶습니다.

누구든지 그 방법을 말해 줄 수 있습니까? 프로그래밍 방식으로 만든 개체를 참조하는 방법을 알고 있지만 NIB 파일 내에서 중간 단계가 수행 되었기 때문에 다시 스레드로 돌아가는 방법을 알아낼 수없는 것 같습니다.


앱 어디에서나 액세스해야하는 변수 (일반적으로 모델 데이터 구조)의 경우 AppDelegate 클래스에서 선언합니다. 참조해야하는 경우 :

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable 

질문을 이해하면 AppDelegate 개체의 멤버 변수 / 속성을 참조하고 싶습니까? 가장 간단한 방법은 [[UIApplication sharedApplication] delegate]를 사용하여 객체에 대한 참조를 반환하는 것입니다.

window라는 속성이있는 경우 다음을 수행 할 수 있습니다.

UIWindow   *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow

다음은 iOS4.0 이상을위한 잘 정의 된 휴대용 대안입니다.

UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];

또는 한 줄로

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

창의 rootViewController속성 (예 : IB) 을 설정하는 것을 잊지 마십시오. 그렇지 않으면 잭이됩니다.


매크로를 정의하고 어디서나 사용하십시오!

#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)

내 코드에서 :-

UIViewController *rootViewController = appDelegateShared.window.rootViewController;

참고 URL : https://stackoverflow.com/questions/231947/referencing-appdelegate-instance-variables

반응형