実現したいこと
献立アプリを作っています。
Core Dataを使用してユーザーがデータベースに料理のメニューを追加でき、またデータベースから料理の情報を取り出してリストに表示できるようにしたいです。
発生している問題・分からないこと
おそらく以下のEntityを構築している際に、エラーが発生したと思います。
CoreData導入に伴い自動で追加された、既存でこちらで編集できないSwiftUI ID+CoreDataProperties.swift
にエラーが発生しました。
エラーメッセージ
error
1Type 'ID.ID' (aka 'Optional<UUID>') does not conform to protocol 'NSFetchRequestResult'
該当のソースコード
ID+CoreDataProperties.swift
1// 2// ID+CoreDataProperties.swift 3// 4// This file was automatically generated and should not be edited. 5// 6 7import Foundation 8import CoreData 9 10extension ID { 11 12 @nonobjc public class func fetchRequest() -> NSFetchRequest<ID> { 13 return NSFetchRequest<ID>(entityName: "ID") //ここにエラー 14 } 15 16 @NSManaged public var id: UUID? 17 18} 19 20extension ID : Identifiable { 21 22}
PersistenceController.swift
1import CoreData 2 3struct PersistenceController { 4 static let shared = PersistenceController() 5 6 static var preview: PersistenceController = { 7 let result = PersistenceController(inMemory: true) 8 let viewContext = result.container.viewContext 9 do { 10 try viewContext.save() 11 } catch { 12 // Replace this implementation with code to handle the error appropriately. 13 // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 14 let nsError = error as NSError 15 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") 16 } 17 return result 18 }() 19 20 let container: NSPersistentContainer 21 22 init(inMemory: Bool = false) { 23 container = NSPersistentContainer(name: "CookBond_New") 24 if inMemory { 25 container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") 26 } 27 container.loadPersistentStores(completionHandler: { (storeDescription, error) in 28 if let error = error as NSError? { 29 fatalError("Unresolved error \(error), \(error.userInfo)") 30 } 31 }) 32 container.viewContext.automaticallyMergesChangesFromParent = true 33 } 34} 35
試したこと・調べたこと
上記の詳細・結果
自力では同じような例が見つからず、
ChatGPTに聞くと以下のように返ってきました。
-
エンティティの属性の変更: エンティティの属性を変更したい場合は、Xcodeのデータモデルエディターで変更を行います。エンティティの属性を追加、削除、または変更すると、Xcodeは自動的に ID+CoreDataProperties.swift ファイルを更新します。
-
カスタムロジックの追加: ID というエンティティに関連するカスタムロジックを追加したい場合は、このファイルではなく、別のファイルにカスタムロジックを追加します。通常、新しいファイルを作成して extension ID を追加し、そこにカスタムロジックを書き込みます。この方法で、自動生成されたコードとカスタムロジックを分離しておくことができます。
-
コードの整理: 自動生成されたファイルとカスタムコードを分離するために、適切な名前を持つ新しいファイルを作成し、そのファイルにカスタムコードを配置することを検討してください。例えば、ID+CustomLogic.swift などの名前で新しいファイルを作成し、そこにカスタムロジックを配置します。
-
手動での編集の必要性の確認: エラーが発生している理由を確認し、本当に手動でファイルを編集する必要があるかどうかを検討してください。多くの場合、エラーはエンティティの属性の変更や、カスタムロジックの追加など、他の方法で解決できる場合があります。
補足
Xcode version14.2
必要な情報があれば伝えていただきたいです。
お分かりになる方、回答よろしくお願いします。

0 コメント