1

xcode 4.3.1에서 간단한 단일보기 프로그램을 만들었습니다. 응용 프로그램이 처음 시작될 때로드되는지, 다시 시작될 때로드되는지에 따라보기가 다른 것을 수행하고 싶습니다.앱이 실행을 마친 시점을 viewController에서 어떻게 알 수 있습니까?

아무에게도이 작업을 수행하는 가장 좋은 방법을 말할 수 있습니까?

appDelegate에는 내 viewController에 대한 참조가 없으므로 AppDelegate didFinishLaunchingWithOptions 메소드에서 변수를 전달할 수 있는지 확신 할 수 없습니다.

ViewController가 어디에도 인스턴스화되지 않은 것처럼 보이면 AppDelegate와 ViewController는 어떻게 통신합니까?

감사합니다.

답변

0

[application : didFinishLaunchingWithOptions :]를 사용하여 방금 시작했는지 확인할 수 있습니다. 당신이 발사 할 때만 한 번 불린다. 일부 플래그를 설정하고 [applicationWillEnterForeground : (UIApplication *) 응용 프로그램]을 결합하여 시작할 수 있는지 아니면 단순히 포 그라운드로 돌아갈 것인지를 결정할 수 있습니다.

+0

필자는이 사실을 깨달았지만 어떻게 viewController에서 이러한 플래그에 액세스 할 수 있습니까? 단일 뷰 응용 프로그램을 만들 때 AppDelegate에서 사용자를 위해 만든 ViewController에 대한 참조가 없습니다. – itgiawa

+0

[응용 프로그램 : didFinishLaunchingWithOptions :] 메서드에서 응용 프로그램이 시작될 때 정적 부울을 설정합니다. [applicationWillEnterForeground :]에서 그 상태를 확인하십시오. –

+0

도움을 주셔서 감사합니다. 나는 아직도 혼란 스럽다. 사진을 업로드했습니다. 보시다시피 AppDelegate에는 ViewController에 대한 참조가 없습니다. 앱 델리게이트에서 정적 변수를 생성하면 ViewController viewDidLoad 메소드는 어떻게 그 변수를 읽을 수 있습니까? – itgiawa

1

NSNotificationCenter를 사용하여 응용 프로그램이 포어 그라운드로 들어가는시기를 알 수 있으며 개별 VC를 등록하여 이벤트를 신경 쓸 수 있습니다. 예 :

- (void)loadView { 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(applicationWillEnterForeground) 
              name:UIApplicationWillEnterForegroundNotification 
              object:nil]; 
} 

loadView (또는 다른 방법) 중에 VC 레지스터가 있습니다. 그런 다음 앱이 포 그라운드로 들어 오면

- (void)applicationWillEnterForeground; 

이 호출됩니다. dealloc 또는 viewDidUnload에서 등록 취소하는 것을 잊지 마십시오.

- (void)dealloc { 
[[NSNotificationCenter defaultCenter] removeObserver:self]; 
[super dealloc]; 
} 
관련 문제