在 SwiftUI 主体中出错的子上下文中创建了核心数据实体

Created Core Data Entity on child context faulted in SwiftUI body

为什么我不能在视图主体中使用这个 draft 对象?

我也试过:

extension NSManagedObjectContext {
    public func newChildContext() -> NSManagedObjectContext {
        let moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
        moc.parent = self
        return moc
    }
}

struct InternalContentView: View {
    private var context: NSManagedObjectContext

    @State private var draft: PlayerEntity

    init(context: NSManagedObjectContext) {
        self.context = context

        let childContext = context.newChildContext()
        draft = PlayerEntity.create(context: childContext)

        print("draft: \(draft)")
        print("draft id: \(draft.id?.uuidString ?? "unknown id")")
        print("draft is faulted: \(draft.isFault)")
    }

    var body: some View {
        printv("draft: \(draft)")
        printv("draft id: \(draft.id?.uuidString ?? "unknown id")")
        printv("draft is faulted: \(draft.isFault)")
        Text("")
    }
}

输出为:

draft: <PlayerEntity: 0x600001de6170> (entity: PlayerEntity; id: 0x600003e4fc60 <x-coredata:///PlayerEntity/t54BF6346-6299-479F-AD02-AC61AC056CCF2>; data: {
    email = nil;
    games =     (
    );
    id = "51BDEE17-DCA4-4EB9-8A56-0780ACFF55B3";
    "name_" = nil;
    teams =     (
    );
})
draft id: 51BDEE17-DCA4-4EB9-8A56-0780ACFF55B3
draft is faulted: false

draft: <PlayerEntity: 0x600001de6170> (entity: PlayerEntity; id: 0x600003e4fc60 <x-coredata:///PlayerEntity/t54BF6346-6299-479F-AD02-AC61AC056CCF2>; data: <fault>)
draft id: unknown id
draft is faulted: true

现在您的子上下文仅存在于 init 中,但您也需要在外部访问它(或者更确切地说,至少在您对其调用 save() 之前)

所以改成 属性

struct InternalContentView: View {
    private var context: NSManagedObjectContext
    private var childContext: NSManagedObjectContext
    ...
  
    init() {
        self.context = context
        childContext = context.newChildContext()