Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 15. NSCoding 본문

카테고리 없음

[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
Comments