카테고리 없음
[iOS - swift] 15. NSCoding
jake-kim
2020. 6. 19. 00:32
1. 저장될 클래스 타입 정의
class Meal {
var name: String
var photo: UIImage?
var rating: Int
init?(name: String, photo: UIImage?, rating: Int) {
self.name = name
self.photo = photo
self.rating = rating
}
}
2. NSObject, NSCoding 상속 & 구현
func encode(with coder: NSCoder) {
coder.encode(name, forKey: PropertyKeys.name)
coder.encode(photo, forKey: PropertyKeys.photo)
coder.encode(rating, forKey: PropertyKeys.rating)
}
required convenience init?(coder: NSCoder) {
guard let name = coder.decodeObject(forKey: PropertyKeys.name) as? String else {return nil}
let photo = coder.decodeObject(forKey: PropertyKeys.photo) as? UIImage
let rating = coder.decodeInteger(forKey: PropertyKeys.rating)
self.init(name: name, photo: photo, rating: rating)
}
3. NSKeyedArchiver, NSKeyedUnarchiver를 이용하여 디스크 접근
1) 주소 세팅
static let DoucumentDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DoucumentDirectory.appendingPathComponent("meals")
2) 접근
let meals = Meal(name: "as", photo: nil, rating: 3)!
let isSuccessful = NSKeyedArchiver.archiveRootObject(meals, toFile: Meal.ArchiveURL.path)
let load = NSKeyedUnarchiver.unarchiveObject(withFile: Meal.ArchiveURL.path) as? Meal