투케이2K

53. (TWOK/UTIL) [Ios/Objc] S_Preference - 프리퍼런스 관리 클래스 본문

투케이2K 유틸파일

53. (TWOK/UTIL) [Ios/Objc] S_Preference - 프리퍼런스 관리 클래스

투케이2K 2022. 6. 23. 13:33

[설 명]

프로그램 : Ios / Objective-C

설 명 : S_Preference - 프리퍼런스 관리 클래스

 
 
 

[소스 코드]

import Foundation

@objc class S_Preference: NSObject {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. UserDefaults 사용해 모바일 데이터 저장 클래스
    // -----------------------------------------
    2. UserDefaults : Key-Value 형태를 저장
    // -----------------------------------------
    3. UserDefaults : 앱이 종료되어도 값이 저장되지만, 앱이 삭제되면 저장된 데이터가 사라짐
    // -----------------------------------------
    4. UserDefaults : Int, Double, Float, String, Bool, Data 등 데이터 타입을 저장 실시
    // -----------------------------------------
    5. 참고 : 앱이 삭제되어도 데이터가 유지되길 원한다면 Core Data 혹은 KeyChain, NSKeyedArchiever등을 이용한 파일 형태로 저장하는 방법이 있습니다
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [Objective C 소스 코드에서 호출 방법]
    /*
    // -----------------------------------------
    1. import 선언 실시 : 프로젝트이름-Swift.h 명시 (#import "objectiveProject-Swift.h")
    // -----------------------------------------
    2. Swift Set 함수 호출 : [[S_Preference shared] setStringWith_sKey:@"S_KEY" _sValue:@"S_VALUE"];
    // -----------------------------------------
    3. Swift Get 함수 호출 :
       NSString *saveData = [[S_Preference shared] getStringWith_sKey:@"S_KEY"];
       saveData.description.UTF8String
    // -----------------------------------------
    4. Swift Void 함수 호출 : [[S_Preference shared] introCreateClear];
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [빠른 로직 찾기 : 주석 로직 찾기]
    // -----------------------------------------
    // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
    // -----------------------------------------





    // MARK: - [클래스 이름 설정]
    let ACTIVITY_NAME = "S_Preference"
    
    
    
    
    
    // MARK: - [클래스 싱글톤 설정 실시]
    @objc static let shared = S_Preference()
    
    
    
    
    
    // MARK: - [string 데이터 저장 실시]
    // [호출 방법 : S_Preference().setString(_sKey: "name", _sValue: "TWOK")]
    @objc func setString(_sKey:String, _sValue:String) {
        UserDefaults.standard.set(_sValue, forKey: _sKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_sKey) == false {
            allData = allData + " [\(_sKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [string 데이터 호출 실시]
    // [호출 방법 : S_Preference().getString(_sKey: "name")]
    @objc func getString(_sKey:String) -> String {
        let returnData = UserDefaults.standard.string(forKey: _sKey) ?? ""
        return returnData
    }
    
    
    
    
    
    // MARK: - [int 데이터 저장 실시]
    // [호출 방법 : S_Preference().setInt(_iKey: "age", _iValue: 28)]
    @objc func setInt(_iKey:String, _iValue:Int) {
        UserDefaults.standard.set(_iValue, forKey: _iKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_iKey) == false {
            allData = allData + " [\(_iKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [int 데이터 호출 실시]
    // [호출 방법 : S_Preference().getInt(_iKey: "age")]
    @objc func getInt(_iKey:String) -> Int {
        let returnData = UserDefaults.standard.integer(forKey: _iKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [Double 데이터 저장 실시]
    // [호출 방법 : S_Preference().setDouble(_dKey: "age", _dValue: 28.5)]
    @objc func setDouble(_dKey:String, _dValue:Double) {
        UserDefaults.standard.set(_dValue, forKey: _dKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_dKey) == false {
            allData = allData + " [\(_dKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [Double 데이터 호출 실시]
    // [호출 방법 : S_Preference().getDouble(_dKey: "age")]
    @objc func getDouble(_dKey:String) -> Double {
        let returnData = UserDefaults.standard.double(forKey: _dKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [Bool 데이터 저장 실시]
    // [호출 방법 : S_Preference().setBool(_bKey: "man", _bValue: true)]
    @objc func setBool(_bKey:String, _bValue:Bool) {
        UserDefaults.standard.set(_bValue, forKey: _bKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_bKey) == false {
            allData = allData + " [\(_bKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [Bool 데이터 호출 실시]
    // [호출 방법 : S_Preference().getBool(_bKey: "age")]
    @objc func getBool(_bKey:String) -> Bool {
        let returnData = UserDefaults.standard.bool(forKey: _bKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [특정 key 값 삭제 실시]
    @objc func removeKey(_rkey:String){
        UserDefaults.standard.removeObject(forKey: _rkey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에서 특정 key 삭제 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_rkey) == true {
            allData = allData.replacingOccurrences(of: " [\(_rkey)] ", with: "")
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [저장된 전체 데이터 조회 실시]
    @objc func selectAllKey() -> String{
        let returnData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        return returnData
    }
    
    
    
    
    
    // MARK: - [저장된 전체 데이터 초기화 실시]
    @objc func removeAll(){
        for key in UserDefaults.standard.dictionaryRepresentation().keys {
            UserDefaults.standard.removeObject(forKey: key.description)
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [인트로 화면 실행 시 초기화 해야하는 프리퍼런스 데이터 : A_Intro : viewDidLoad]
    @objc func introCreateClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> introCreateClear() :: 인트로 화면 실행 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [앱 종료 시 초기화 해야하는 프리퍼런스 데이터 : A_Main : viewDidDisappear]
    @objc func mainFinishClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> mainFinishClear() :: 앱 종료 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 시작 시 초기화 해야하는 프리퍼런스 데이터 : AppDelegate : didFinishLaunchingWithOptions]
    @objc func proccessCreateClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessCreateClear() :: 프로세스 시작 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 종료 시 초기화 해야하는 프리퍼런스 데이터 : AppDelegate : applicationWillTerminate]
    @objc func proccessFinishClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessFinishClear() :: 프로세스 종료 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 백그라운드 전환 시 프리퍼런스 초기화 : SceneDelegate : sceneWillResignActive]
    @objc func proccessBackgroungClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessBackgroungClear() :: 프로세스 백그라운드 전환 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [메인 웹뷰 리로드 시 초기화 데이터 : A_Main : onResume / SceneDelegate : sceneWillEnterForeground]
    @objc func webViewReloadClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> webViewReloadClear() :: 웹뷰 리로드 수행 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
} // [클래스 종료]

 

반응형
Comments