NSPersistentStoreDescription

NSPersistentStoreDescription은 코어데이터의 영구저장소에 관한 여러 설정 정보들을 담고 있는 클래스이다. 이는 코어데이터 스택을 초기화하는 시점에 NSPersistentContainer나 NSPersistentStoreCoordinator에 의해서 사용된다. NSPersistentContainer를 사용하는 경우에는 디폴트 디스크립션이 자동으로 생성되기 때문에 만들 필요가 없긴한데, 저장소의 위치나 동작 방식을 커스터마징하기 위해 추가로 설정할 수 있다.

생성

init(url:) 을 통해서 생성할 수 있다. URL은 실제 저장소 파일의 URL이어야 한다. 그외에 몇 가지 설정을 다음 프로퍼티로 조절할 수 있다.

프로퍼티들

  • timeout: TimeInterval – 저장소 접속의 타임아웃 시간
  • type: String – 저장소 타입. 미리 정의된 상수가 있다. NSSQLiteStoreType, NSXMLStoreType, NSBinaryStoreType 등을 사용할 수 있다. 이후에 Swift 타입으로 .sqlite 등으로 바뀔 가능성이 있다.
  • isReadOnly: Bool
  • shouldAddStoreAsynchronously: Bool

그외에 setOption(_:,forKey:), setValue(_:forPragmaNamed:)를 통해서 별도의 옵션을 지정할 수 있다.

예제

다음과 같이 사용자 문서 디렉토리에 저장소 파일을 생성하고, 액세스할 수 있게 한다. 이렇게 생성한 디스크립션 객체는 컨테이너가 저장소를 로딩하기 전에 persistentStoreDescription 프로퍼티에 지정되어야 한다.

let desc: NSPersistentStoreDescription = {
    let fileManager = FileManager.default
    guard let dir = fileManager.urls(for:.documentationDirectory,
                  in:.userDomainMask).first,
    let fileURL = dir.appendingPathComponent('store.sqlite')
    else { fatalError("Can't init store file") }
    
    let desc = NSPersistentStoreDescription(url: fileURL)
    desc.type = NSSQLiteStoreType
    return desc
}()