Computer >> 컴퓨터 >  >> 프로그램 작성 >> IOS

NSUserDefaults에 사용자 정의 개체를 저장하는 방법은 무엇입니까?

<시간/>

이 기사에서는 애플리케이션에 사용자 정의 개체를 저장하는 방법을 배우겠지만, 사용자 정의 개체를 저장하는 방법을 배우기 전에 사용자 정의 개체가 무엇인지 볼까요?

사용자 정의 개체는 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"

결국 이렇게 됩니다.

NSUserDefaults에 사용자 정의 개체를 저장하는 방법은 무엇입니까?