2012-04-17 5 views
6

Xcode 버전 4.2.1 및 iOS 5.0 프로젝트에서 작업하고 있습니다. 사용자가 배경 화면에서 실행중인 앱을 강제로 홈 화면에서 종료 할 때까지도 응용 프로그램을 완전히 종료 할 때 어떤 기능이 호출되는지 궁금합니다. 나는iPhone 응용 프로그램이 종료 될 때 호출되는 함수는 무엇입니까?

(void)applicationWillTerminate:(UIApplication *)application

가 호출 될 것이라고 가정했지만, 심지어 배경에 응용 프로그램을 종료 한 후가 호출되지 않은 밝혀졌다. 기본적으로 앱이 완전히 종료되기 전에 만든 메서드를 호출하기 때문에 앱의 끝에서 어떤 함수가 호출되는지 알아야합니다.

감사합니다.

+0

당신이 선택/답변 중 하나를 체크 표시하십시오 수 없습니다. –

답변

1

앱이 이미 일시 중지 된 경우 더 이상 알림을받지 않습니다. didEnterBackground 알림을보십시오.

+0

홈 화면에있는 동안 내가하고 싶은 것을 알 수 없습니까? 기능에 관해서는, 나는 그런 종류의 기능을보고 있음에도 불구하고 그것을 발견하지 못했다. – Max

+0

-1 : "willSuspend"알림 또는 대리인 메시지가 없습니다. 아마도 "didEnterBackground"를 원할 것입니다. – rickster

+0

응용 프로그램이 완전히 종료되었을 때 메서드를 호출하기 원하기 때문에 홈 단추를 누를 때가 아니라 그것을 원하지 않을 수 있습니다. 즉, 배경을 입력 할 때 내 방법을 호출하고 싶지 않습니다. – Max

0
- (void)applicationWillTerminate:(UIApplication *)application 

이것은 UIApplicationDelegate 프로토콜에 있습니다.

0

documentation here은이 경우의 동작을 설명합니다.

요약하면 앱이 종료되면 전경 또는 배경에서 실행 중일 때만 applicationWillTerminate: 메시지가 전송됩니다. 따라서 앱이 포 그라운드 또는 장기 실행 백그라운드 모드 중 하나 (예 : VoIP, 오디오 또는 beginBackgroundTaskWithExpirationHandler으로 표시된 장시간 작업)에서 실행되지 않는 한 background 상태에서 suspended 상태로 빠르게 전환됩니다. 이 경우 메시지는 applicationWillTerminate: 번으로 수신되지 않습니다.

5

Here's a good overview 응용 프로그램 수명주기 알림 중 & iOS 4.0 이상에서 대리인 메시지. 간단히 말해 ...

시스템은 일반적으로 앱이 이미 백그라운드에서 일시 중지 된 후에 만 ​​앱을 종료하므로 일반적으로 willTerminate을 볼 수 없습니다. 앱이 일시 중지되면 더 이상 행동을 취할 수 없으므로 (*) 콜백이 필요하지 않습니다.

didEnterBackground 대리인 메시지 또는 알림은 종료를 시도하기 전에 상태를 정리하거나 상태를 저장할 수있는 마지막 기회로 간주되어야합니다.


(*) 그래, 그것은 오디오, VoIP 및 탐색과 같은 지원되는 배경 실행 모드 중 하나이지만,이 경우에 하나가 아직 중단되지 않았거나이 있다면 물건을 할 수있는 응용 프로그램 해당 배경 모드와 관련된 진입 점으로 일시 중지되지 않았습니다.

+0

그래서 사용자가 배경에서 실행중인 앱을 강제로 종료하는 경우 내 메소드를 호출하는 좋은 방법이 없습니다. 도와 줘서 고마워. – Max

+0

그럼에도 불구하고 알림을받지 못할 수도 있습니다. 사용자가 몇 초 안에 앱 전환기를 통해 앱을 종료하지 않으면 앱이 이미 일시 중지됩니다. – rickster

-1

세 가지 방법이 도움이 될 것이다 : 어플리케이션이 이 정지 상태에있는 동안가 종료되지 않을 때

- (void)applicationWillResignActive:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 
18

"applicationWillTerminate"메소드 만 호출 될 것이다.

사례 1 :

두 가지 사례를 다음을 통해 이동, 현재 응용 프로그램이 포 그라운드 활성 상태에 고려하고, 이것을 이해하려면 당신은 단일 탭 홈 버튼, 응용 프로그램은 직접 호출하여 일시 중단 된 상태로 전환 될 때 메소드 - (1) applicationWillResignActive 및 (2) applicationDidEnterBackground.

이제 앱을 종료하거나 종료하려고 할 때 홈 버튼을 두 번 탭한 다음 최근 앱 화면에서 현재 앱 화면을 스 와이프하면 앱이 일시 중지 상태가됩니다. 따라서 "applicationWillTerminate"메서드는 호출되지 않습니다.

사례 2 : 더블 탭 홈 버튼, 응용 프로그램은 메소드를 호출하여 상태를 비활성 간다 - (1) applicationWillResignActive.

이제 앱 종료/종료를 시도 할 때 최근 앱 화면에서 현재 앱 화면을 스 와이프하여 종료하는 동안 앱이 비활성 상태 (일시 중지 상태가 아님)로 있습니다. 따라서 "applicationWillTerminate"메서드가 호출됩니다. 애플이 무슨 말을

봐이보기에 대한 추가 정보를 원하시면 enter image description here

-Apple's Official Documentation on applicationWillTerminate(_:)

+0

위대한 답변, 감사합니다! Apple 설명서에 대한 링크도 있으면 멋지겠습니까? –

관련 문제