CoreDataを使ったSwiftUIアプリ開発の練習をしていた時のこと。

Xcodeで以下のエラーが発生し、プレビューが確認できなくなってしまった。

Error Domain=com.apple.dt.ultraviolet.service Code=12 “Rendering service was interrupted” UserInfo={NSLocalizedDescription=Rendering service was interrupted}

該当のソースコードは先日書いた記事のとおりで、当初はうまく機能していたのだが、ビューを拡張していく中で上記のエラーが起こりプレビューが使えなくなってしまったのだ。

一応iOSシミュレーターでの動作は確認できるのだが、やはりプレビュー機能に慣れていると開発効率が大幅に下がってしまうので解決法を探すことにした。

プレビュー用コードの改変で解決

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)
  }
}

先日の記事で紹介した上記のコードを、以下に改変することでエラーは解決された。

struct TaskEditView_Previews: PreviewProvider {
  static var previews: some View {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let task = Task(context: context)
    
    task.name = "Test Task"
     
    return TaskEditView(task: task)
      .environment(\.managedObjectContext, context)
  }
}