Swift로 커스텀 모델 객체를 아카이브 파일로 영속화

개요 RealmSwift를 사용하여 특정 데이터를 영속화했습니다. RealmSwift 개소에서 아카이브 빌드시에 에러가 발생 아마 RealmSwift 0.120.1에 혼재하는 버그가 발견되었다. XCode 버전을 올려야했기 때문에 부득이한 RealmSwift를 포기 대신 CoreData를 도입하려고했지만 마이그레이션 및 배포 비용이 걸리고 기간이 엄격합니다. Document 파일로 영속화 어느 언어에서도 파일 조작은 의외로 기본적인 것 같은데 조사해도 좀처럼 정보가 나오지 않았다 NSUserDefaults 에 보존하는 패턴이나 단순한 캐릭터 라인을 텍스트 보존하는 등은 많이 소개되고 있다 하고 싶은 일 특정 등록 양식의 특정 정보를 일정 기간 보유하고 싶습니다. NSUserDefaults로 저장하는 대신 간단한 파일로 저장하고 싶습니다. 접근 영속화 대상 데이터를 직렬화하고 이진화하여 Document 파일로 유지 NSKeyedArchiver로 직렬화 저장, NSKeyedUnarchiver로 검색 디자인 구현 키포인트는 NSObject 클래스는 NSCoding 를 상속하지 않으면 아카이브화할 수 없다 ※이번은 ViewController는 할애 모델 import Foundation //MARK: - FormModel public class FormModel: NSObject, NSCoding { public var id: String public var registerDatetime: NSDate public var name: String public override init() { self.id = NSUUID().UUIDString self.registerDatetime = NSDate() self.name="" } required public init?(coder aDecoder: NSCoder) { self.id = aDecoder.decodeObjectForKey("id") as! String self.registerDatetime = aDecoder.decodeObjectForKey("registerDatetime") as! NSDate self.name = aDecoder.decodeObjectForKey("name") as! String } public func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(self.id, forKey: "id") aCoder.encodeObject(self.registerDatetime, forKey: "registerDatetime") aCoder.encodeObject(self.name, forKey: "name") } } manager import Model class CacheManager { static let instance = CacheManager() private let path: String private let fileName: String init() { self.path = NSHomeDirectory() + "/Documents/" self.fileName = "FormCache.cache" } internal func add(form: FormParam) -> Void { let cache = FormModel() cache.id = form.id != nil ? form.id! : 0 cache.registerDatetime = form.registerDatetime cache.name=form.name NSKeyedArchiver.archiveRootObject(cache, toFile: self.path + self.fileName) } private func get() -> [FormModel] { return NSKeyedUnarchiver.unarchiveObjectWithFile(self.path + self.fileName) as! [FormModel] } } 요약 단순한 소량 데이터에는 적합하지만, 본래라면 옆으로 입지 않고 CoreData나 SQLite등을 사용해 관리하는 것이 좋다 물론 파일로 관리하는 장점도 많이 있으므로 케이스 바이 케이스 확실히, iOS 앱 개발은 무엇인가와 트랩이 많은 생각이 든다. XCode로, 세밀한 제약으로, 다양한 어려움

좋은 웹페이지 즐겨찾기