Xcode 8에서 자동 생성되는 Core Data 엔터티의 소스 파일

소개


  • Xcode 8부터는 NSManagedObject의 서브 클래스 (이하 엔티티와 설명)가 자동 생성 될 수 있습니다.
  • 이전과 같이, 메뉴로부터 [Editor] -> [Create NSManagedObject Subclass...] 로서 생성할 필요가 없습니다
  • 클래스 정의를 사용자 정의하고 싶다면 직접 생성 할 수 있습니다.

  • 선택하는 옵션에 따라 자동 생성되는 것이 다르므로 그 요약입니다.

    검증 환경


  • macOS Sierra 10.12.5
  • Xcode 8.3.3

  • 샘플


  • 엔티티 이름: Product
  • 속성으로서 name 및 price를 가지는




  • 자동 생성되는 파일


  • 엔티티의 Codegen 속성은 클래스와 확장 중 하나 (또는 ​​둘 다)를 생성합니다.

    클래스 정의(A)


  • 프로퍼티의 선언 등은없는 클래스 정의 부분입니다.

    Product+CoreDataClass.swift
    import Foundation
    import CoreData
    
    @objc(Product)
    public class Product: NSManagedObject {
    
    }
    

    익스텐션(B)


  • 페치 요청을 반환하는 메서드와 속성 선언이 추가되었습니다.

    Product+CoreDataProperties.swift
    import Foundation
    import CoreData
    
    
    extension Product {
    
        @nonobjc public class func fetchRequest() -> NSFetchRequest<Product> {
            return NSFetchRequest<Product>(entityName: "Product")
        }
    
        @NSManaged public var name: String?
        @NSManaged public var price: Int64
    
    }
    

    생성된 파일은 어디에 있습니까?


  • 다음 장소에서 생성되는 것 같습니다.
    ~/Library/Developer/Xcode/DerivedData/プロジェクト名-何らかの文字列/Build/Intermediates/プロジェクト名.build/Debug-iphonesimulator/プロジェクト名.build/DerivedSources/CoreDataGenerated/プロジェクト名/
    

    Codegen 속성 값과 자동 생성된 파일의 조합




    Codegen 값
    자동 생성되는 파일
    비고


    Manual/None
    -
    지금까지 직접 만들어야합니다.

    Class Definition
    A, B
    직접 만들 필요 없음

    Category/Extension
    B
    클래스 정의 만 스스로 만들어야합니다.


    어떻게 구분할까?



    다음과 같은 구분이 될 것 같습니다.
  • 엔티티 사용자 정의 필요: Manual/None, Category/Extension
  • awakeFromInsert() 또는 validateForInsert() 등을 재정의하는 경우 등

  • 엔티티 사용자 정의 필요 없음: Class Definition
  • 좋은 웹페이지 즐겨찾기