자체 제작 클래스의 Attribute를 CoreData로 저장하는 방법

5980 단어 iOSSwiftCoreData

개요


코어 Data noob인 만큼 트랜스포머를 사용해 애트리버트를 저장하려는 타입 중 표준적으로 준비된 타입이 없을 때는 당황스러우므로 메모로 남겨뒀다.
아마 정답의 흐름으로
  • 저장하고 싶은 자제 클래스 정의
  • 클래스가 NSCoding 프로토콜
  • 을 준수하도록 설정
  • 인코딩 처리와 디코딩 처리의 실현
  • Enity의 Type을 Transformable
  • 로 설정
    네.다음은 상세히 서술한다.
    Swift 버전은 4.1입니다.

    자제류의 정의


    User.swift
    class User: NSManagedObject {
      @NSManaged var name: String
      @NSManaged var pet: Pet
    }
    
    class Pet {
      var name: String?
      var gender: Gender?
    }
    
    enum Gender: Int {
      case male = 0
      case female
    }
    
    상술한 것은 이번 처리의 데이터 모델이다.User에는 이름과 키우는 반려동물이 있고, Pet에는 이름과 성별이 있다.User 클래스를 CoreData의 Enity로 처리하기 위해 NSManagedObject가 상속하도록 속성@NSManaged이 첨부되어 있습니다.
    이 글의 목적은 펫 속성을 Attribute로 저장하는 것입니다.
    그럼 위에 코드를 이렇게 쓰면 "pet 속성은 사용할 수 없습니다@NSManaged!"이러다 혼나.보아하니 반드시 Obj-C가 표현할 수 있는 반이어야 한다.따라서 Pet 레벨이 NSObject를 상속하도록 합니다.
    User.swift
    ...
    
    class Pet: NSObject {
      var name: String?
      var gender: Gender?
    }
    
    ...
    
    이렇게 하면 욕을 먹지 않겠지만 코어데이터로 처리할 수는 없다.

    NSCoding 준수


    그런 다음 Pet 클래스가 NSCoding과 일치하도록 코딩 및 디코딩 프로세스를 구현합니다.
    User.swift
    ...
    
    class Pet: NSObject, NSCoding {
      var name: String?
      var gender: Gender?
    
      func encode(with aCoder: NSCoder) {
        aCoder.encode(self.name, forKey: "Name")
        aCoder.encode(self.gender!.rawValue, forKey: "Gender")
      }
    
      required init?(coder aDecoder: NSCoder) {
        super.init()
    
        self.name = aDecoder.decodeObject(forKey: "Name") as? String
        let genderValue = aDecoder.decodeInteger(forKey: "Gender")
        self.gender = Gender(rawValue: genderValue)
      }
    }
    
    ...
    
    이렇게 하면 코어데이터로 펫 레벨을 처리할 수 있습니다!
    여기서 주의해야 할 것은 엔움도 그렇게 저장할 수 없기 때문에 먼저 rawValue를 통해 인코딩/해독을 해야 한다는 것이다.당연하다고...

    Transformable로 설정


    마지막으로 Attribute의 Type을 Transformable로 변경하면 완성됩니다.

    상관없어, "Attribute의 Type을 Transformable로 만들어라"는 글은 엉망이야.큰일났다...(어휘력 0)

    좋은 웹페이지 즐겨찾기