백그라운드에서 앱을 열 때 ViewDidEar가 호출되지 않음
이 0(라벨 View컨트롤러에서 View컨트롤러에서 View컨트롤러가 열립니다.ViewController
팅세세 i i i i i를 했습니다.viewDidAppear
20달러하지만 앱을 viewDidLoad
,viewDidAppear
★★★★★★★★★★★★★★★★★」viewWillAppear
이치노앱열열 열? ?? ???제가 해야 할 일이 있나요?applicationDidBecomeActive
무슨 일입니까?
정확한 이벤트 순서가 궁금해서 다음과 같이 앱을 설치했습니다(@Zohaib, 아래의 NSNotification Center 코드를 사용하여 질문에 답변할 수 있습니다).
// AppDelegate.m
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"app will enter foreground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"app did become active");
}
// ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"view did load");
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
}
- (void)appDidBecomeActive:(NSNotification *)notification {
NSLog(@"did become active notification");
}
- (void)appWillEnterForeground:(NSNotification *)notification {
NSLog(@"will enter foreground notification");
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"view will appear");
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"view did appear");
}
기동시의 출력은 다음과 같습니다.
2013-04-07 09:31:06.505 myapp[15459:11303] view did load
2013-04-07 09:31:06.507 myapp[15459:11303] view will appear
2013-04-07 09:31:06.511 myapp[15459:11303] app did become active
2013-04-07 09:31:06.512 myapp[15459:11303] did become active notification
2013-04-07 09:31:06.517 myapp[15459:11303] view did appear
배경을 입력한 후 포그라운드를 다시 입력합니다.
2013-04-07 09:32:05.923 myapp[15459:11303] app will enter foreground
2013-04-07 09:32:05.924 myapp[15459:11303] will enter foreground notification
2013-04-07 09:32:05.925 myapp[15459:11303] app did become active
2013-04-07 09:32:05.926 myapp[15459:11303] did become active notification
Objective-C 사용
해 주세요.UIApplicationWillEnterForegroundNotification
안에서ViewController
의 »viewDidLoad
앱이 백그라운드에서 돌아오면 알림용으로 등록된 방법으로 원하는 작업을 수행할 수 있습니다. ViewController
앱이 백그라운드에서 포그라운드로 돌아오면의 viewApear 또는 viewDidApear가 호출되지 않습니다.
-(void)viewDidLoad{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doYourStuff)
name:UIApplicationWillEnterForegroundNotification object:nil];
}
-(void)doYourStuff{
// do whatever you want to do when app comes back from background.
}
등록한 알림의 등록을 취소하는 것을 잊지 마십시오.
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
등록하는 경우 주의해 주세요.viewController
★★★★★★에UIApplicationDidBecomeActiveNotification
될 .viewController
해 주세요.
Swift 사용
옵서버를 추가하기 위해 다음 코드를 사용할 수 있습니다.
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: "doYourStuff", name: UIApplication.willEnterForegroundNotification, object: nil)
}
func doYourStuff(){
// your code
}
옵서버를 삭제하려면 swift의 deinit 함수를 사용합니다.
deinit {
NotificationCenter.default.removeObserver(self)
}
Swift 3.0 + + 버전
고객님의 고객명viewDidLoad
된 이
NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
그런 다음 이 기능을 추가하고 필요한 작업을 수행합니다.
func doSomething(){
//...
}
마지막으로 뷰 컨트롤러가 파괴되었을 때 알림 옵서버를 청소하기 위해 이 기능을 추가합니다.
deinit {
NotificationCenter.default.removeObserver(self)
}
Swift 4.2 버전
Notification Center에서 합니다.viewDidLoad
이 때 이 오다
NotificationCenter.default.addObserver(self, selector: #selector(doSomething), name: UIApplication.willEnterForegroundNotification, object: nil)
호출해야 할 메서드를 구현합니다.
@objc private func doSomething() {
// Do whatever you want, for example update your view.
}
할 수 .ViewController
파괴되었습니다. 및 10.11 합니다.
deinit {
NotificationCenter.default.removeObserver(self)
}
만 하면 .UIApplicationWillEnterForegroundNotification
을 사용하다
UIApplicationWillEnterForgroundNotification에 등록하는 것은 여러 컨트롤러가 해당 알림에 반응할 수 있으므로 위험하다고 생각합니다.통지가 수신되었을 때 이러한 컨트롤러가 아직 표시되는 것을 보증하는 것은 없습니다.
다음 작업을 수행합니다. 앱의 위임 didBecomeActive 메서드에서 액티브 컨트롤러에 직접 viewDidApp을 호출합니다.
다음 코드를 에 추가합니다.- (void)applicationDidBecomeActive:(UIApplication *)application
UIViewController *activeController = window.rootViewController;
if ([activeController isKindOfClass:[UINavigationController class]]) {
activeController = [(UINavigationController*)window.rootViewController topViewController];
}
[activeController viewDidAppear:NO];
AppDelegate 어플리케이션 WillEnterForeground에서 이 기능을 추가해 보십시오.
func applicationWillEnterForeground(_ application: UIApplication) {
// makes viewWillAppear run
self.window?.rootViewController?.beginAppearanceTransition(true, animated: false)
self.window?.rootViewController?.endAppearanceTransition()
}
Apple의 설명서에 따르면:
(void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated;
설명:
하위 컨트롤러에 외관이 변경되려고 함을 알립니다.사용자 지정 컨테이너 컨트롤러를 구현하는 경우 이 방법을 사용하여 하위 컨테이너의 보기가 나타나거나 사라지려고 함을 알립니다., , , 또는 를 직접 호출하지 마십시오.
(void)endAppearanceTransition;
설명:
하위 컨트롤러에 모양이 변경되었음을 알립니다.사용자 정의 컨테이너 컨트롤러를 구현하는 경우 이 방법을 사용하여 아이에게 보기 전환이 완료되었음을 알립니다.
샘플 코드:
(void)applicationDidEnterBackground:(UIApplication *)application
{
[self.window.rootViewController beginAppearanceTransition: NO animated: NO]; // I commented this line
[self.window.rootViewController endAppearanceTransition]; // I commented this line
}
질문:.내가 어떻게 고쳤지?
ANS: 나는 이 선 조각을 응용 프로그램에서 찾았습니다.이 행으로 인해 앱은 ViewWillAple 알림을 수신하지 못했습니다.내가 이 대사들을 언급했더니 잘 되고 있어.
언급URL : https://stackoverflow.com/questions/15864364/viewdidappear-is-not-called-when-opening-app-from-background
'programing' 카테고리의 다른 글
Azure Web 앱은 매우 느리다 (0) | 2023.04.21 |
---|---|
'치명적' 수신:Git repo 원격 추가를 시도할 때 Git 저장소가 아님" (0) | 2023.04.21 |
Visual Studio에서 기본 컨트롤 템플릿을 추출하는 방법 (0) | 2023.04.16 |
[ WPF ]체크박스: 변경된 처리를 체크합니다. (0) | 2023.04.16 |
폴더를 기존 Heroku 앱과 링크하는 방법 (0) | 2023.04.16 |