2016년 2월 25일 목요일

아카이브 파일을 이용한 swift key value 저장

알람 리스트를 저장한다고 해보자

오전 , 오후, 시간, 반복, 설정  이러한 key와 이에 대한 value

다음과 같은 key value 쌍으로 정의 하면

 ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"],

이러한 데이터를 저장하는 swift의 데이터 형은 어떻게 선언 하는가

[String : String]

이러한 데이터를 array로 처리 하니 다음과 같은 타입이 된다.
 [[String: String]] 

이러한 데이터를 파일로 저장했다가 필요에 따라 로드 하고 변경이되면 저장 해야 한다.

NSKeyedUnarchiver, NSKeyedArchiver를 이용하여 저장 하고 불러 올수 있다.

사용자 경로 처리를 위한 helper 클래스
class Helper {
    
    static let sharedInstance = Helper()
    
    static func getDocumentsDirectory() -> NSString {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let documentsDirectory = paths[0]
        return documentsDirectory
    }
}




사용자 경로에서 moriningcall.archive로 저장을 하고 불러오는 코드는 대략 아래와 같다.

다음과 같이 어레이를 선언 한다.
var morningcalldata: [[Sting:String]]!


let filemgr = NSFileManager.defaultManager()
        
        let filename = Helper.getDocumentsDirectory().stringByAppendingPathComponent("morningcall.archive")
        if filemgr.fileExistsAtPath(filename) {
            morningcalldata = NSKeyedUnarchiver.unarchiveObjectWithFile(filename) as! [[String: String]]
        } else {
            //디폴트 데이터
            morningcalldata = [
                        ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"],
                        ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"],
                        ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"],
                        ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"],
                        ["ampm":"오전","time":"06:00","repeat":"월화수목금","setting":"OFF"]
                    ]
            //최초 save
            NSKeyedArchiver.archiveRootObject(morningcalldata, toFile: filename )
        }

댓글 없음: