メインのビューとは別に以下のサブビューがあるとする。

import SwiftUI
import CoreData

struct TaskEditView: View {
  @ObservedObject var task: Task
  
  var body: some View {
    VStack {
      Text(task.name!)
    }.padding()
      .navigationBarTitle(task.name!)
  }
}

CoreDataで管理されているエンティティTaskを変数taskとして受け取り、ビューに値を表示するだけのシンプルなビューだ。

このような場合、デフォルトで用意されているプレビュー構造体ではエラーが発生してしまう。

エンティティを渡す必要があるのだ。

プレビュー構造体でエンティティを用意する

プレビュー構造体を以下のように書き換える。

struct TaskEditView_Previews: PreviewProvider {
  static let entity = NSManagedObjectModel.mergedModel(from: nil)?.entitiesByName["Task"]
  
  static var previews: some View {
    let task = Task(entity: entity!, insertInto: nil)
    task.name = "Test Task"
    
    return TaskEditView(task: task)
  }
}

これでエラーは解消し、Xcodeのプレビューが機能するようになるはずだ。