メインのビューとは別に以下のサブビューがあるとする。
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のプレビューが機能するようになるはずだ。