1. 이전 포스팅 확인하기

 

https://growingsaja.tistory.com/933

 

tmp in office [Objective-C] 앱 만들기 입문 - 30 : 환율 정보 수집으로 두나무 하나은행 환율 정보 기능

1. 이전 포스팅 확인하기 https://growingsaja.tistory.com/932 2. 이번 목표 a. 두나무의 환율 정보 제공 api 사용, 데이터의 출처는 하나은행으로 추측됩니다. b. 환율 노출 기능 개선 (사용할 수 있을까 싶어

growingsaja.tistory.com

 

 

 

 

 

2. 작업 내용 개요

 

이용자가 앱을 사용하다가 앱을 아래로 내리면 Scene 백그라운드 실행됨

다시 아래로 내린 앱을 위로 올리면 Scene 포그라운드 실행됨

 

그래서, Scene 포그라운드 실행 부문에, 앱 복귀시 refresh할 기능들을 실행할 수 있도록 세팅하여 최신화가 가능합니다.

 

 

 

 

 

3. 기능 구현 주요 소스코드

 

ServiceRecentRates 정보의 경우, 주요 데이터들이 nil인 경우 무조건 수집을 try하는 기능으로 구현되어있기에

앱을 재시작한것처럼 데이터가 없는 상태로 만들어주어 데이터 수집을 실행하도록 합니다.

 

// vim SceneDelegate.m

#import "SceneDelegate.h"
// 환율 정보 리셋
#import "ServiceRecentRates.h"


// MARK: - [헤더 [선언부] 호출]
@interface SceneDelegate ()
@end
@implementation SceneDelegate




// ...




// MARK: - [Scene 포그라운드 실행]
- (void)sceneWillEnterForeground:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 : Scene 포그라운드 실행"
    NSLog(@"[포그라운드 실행] ::: SceneDelegate >> sceneWillEnterForeground");
    ServiceRecentRates *ratesService = [ServiceRecentRates sharedInstance];
    ratesService.provider = nil;
    ratesService.usdkrw = nil;
    ratesService.recentDateTime = nil;
    ratesService.openUsdkrw = nil;
}




// ...

 

 

 

 

 

4. 전제 소스코드

 

// vim SceneDelegate.h

#import <UIKit/UIKit.h>

// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. UI 딜리게이트 (선언부)
2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생성자) 선언
// -----------------------------------------
*/



// -----------------------------------------
@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
// -----------------------------------------


// MARK: [전역 변수 및 메소드 선언 부분]
@property (strong, nonatomic) UIWindow * window;


// -----------------------------------------
@end
// -----------------------------------------

 

// vim SceneDelegate.m

#import "SceneDelegate.h"
// 환율 정보 리셋
#import "ServiceRecentRates.h"


// MARK: - [헤더 [선언부] 호출]
@interface SceneDelegate ()
@end
@implementation SceneDelegate



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. UI 딜리게이트 (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [UI창 선택적 구성 및 제공된 UI창에 Scene 연결]
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
    // 설명 :: UI창 선택적 구성 및 제공된 UI창에 Scene 연결]
    NSLog(@"[Scene 연결] ::: SceneDelegate >> willConnectTo");
}



// MARK: - [시스템에 의해서 Scene 해제 : background 상태 및 session 삭제]
- (void)sceneDidDisconnect:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 :: 시스템에 의해서 Scene 해제 : background 상태 및 session 삭제]
    NSLog(@"[Scene 해제] ::: SceneDelegate >> sceneDidDisconnect");
}



// MARK: - [Scene 활성화 및 사용자 이벤트에 응답 실시]
- (void)sceneDidBecomeActive:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 :: Scene 활성화 및 사용자 이벤트에 응답 실시]
    NSLog(@"[이벤트 응답] ::: SceneDelegate >> sceneDidBecomeActive");
}



// MARK: - [Scene 활성 상태 해제 및 사용자 이벤트에 대한 응답 중지]
- (void)sceneWillResignActive:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 :: Scene 활성 상태 해제 및 사용자 이벤트에 대한 응답 중지
    NSLog(@"[응답 중지] ::: SceneDelegate >> sceneWillResignActive");
}



// MARK: - [Scene 포그라운드 실행]
- (void)sceneWillEnterForeground:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 : Scene 포그라운드 실행"
    NSLog(@"[포그라운드 실행] ::: SceneDelegate >> sceneWillEnterForeground");
    ServiceRecentRates *ratesService = [ServiceRecentRates sharedInstance];
    ratesService.provider = nil;
    ratesService.usdkrw = nil;
    ratesService.recentDateTime = nil;
    ratesService.openUsdkrw = nil;
}



// MARK: - [Scene 백그라운드 실행]
- (void)sceneDidEnterBackground:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    // 설명 : Scene 백그라운드 실행
    NSLog(@"[백그라운드 실행] ::: SceneDelegate >> sceneDidEnterBackground");
}



// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

+ Recent posts