이 기사에서는 애플리케이션에 사용자 정의 개체를 저장하는 방법을 배우겠지만, 사용자 정의 개체를 저장하는 방법을 배우기 전에 사용자 정의 개체가 무엇인지 볼까요?
사용자 정의 개체는 Int, Double, String 등과 같은 기본 데이터 유형이 아닌 클래스 또는 구조 또는 기타 데이터입니다. NSUserDefaults에 데이터를 저장하는 것은 3단계 프로세스입니다.
맞춤 개체 만들기
나이 변수와 이름 변수가 있는 사용자 정의 클래스 Person을 만들 것입니다.
class Person: NSObject, NSCoding { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } required convenience init(coder aCoder: NSCoder) { let name = aCoder.decodeObject(forKey: "name") as! String let age = aCoder.decodeInteger(forKey: "age") self.init(name: name, age: age) } func encode(with acoder: NSCoder) { acoder.encode(age,forKey: "age") acoder.encode(name,forKey: "name") } }
사용자 정의 개체 인코딩
이 단계에서 우리는 person 객체의 배열을 만들고 이를 people이라고 부르고 임의의 데이터로 초기화할 것입니다. 해당 객체를 생성하면 NSKeyedArchiver를 사용하여 이 객체를 보관하고 나중에 userDefaults에 저장합니다.
let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData")
이제 아카이브된 객체를 핵심 데이터에 성공적으로 저장했습니다. 이제 해당 객체를 아카이브 해제하고 인쇄할 차례입니다.
사용자 정의 개체 디코딩
NSKeyedArchiver와 유사하게 이 개체를 보관 취소하는 데 사용할 NSKeyedUnarchiver가 있습니다.
let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person]
이제 이 "decodedPeople" 개체에는 두 번째 단계에서 만든 개체가 포함됩니다.
at 객체로 원하는 작업을 수행할 수 있습니다. 이제 ViewController 파일이 어떻게 생겼는지 봅시다.
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData") print("data decoded, encoding now") let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person] print(decodedPeople) } }
이제 마지막 인쇄 문에 중단점을 놓고 이 코드를 실행합니다. 실행될 때 이 명령을 실행합니다.
po decodedPeople.first?.name
결과는
Optional<String> - some : "P1"
결국 이렇게 됩니다.