SwiftUI แสดงตัวอย่างข้อขัดข้องกับแกนกลางข้อมูล'NSInvalidArgumentException'

0

คำถาม

ฉันมีปัญหาที่ผมไม่สามารถแสดงตัวอย่างในมุมมองของโปรแกรมเกี่ยวกับพวเพราะฉันมักจะได้ข้อผิดพลาดคือ:

"Terminating โปรแกรมเกี่ยวเนื่องจาก uncaught นข้อยกเว้น 'NSInvalidArgumentException',เหตุผล:'เป็น NSManagedObject ของชั้นเรียน 'AppMPG_A'ต้องที่ถูกต้อ NSEntityDescription."

ตอนนี้มากกล่องแสดงรายละเอียด:ในมุมมฉันอยากจะแสดงตัวอย่างผมมีค@ถูกเชื่อมโยงของคนแบบนามปธรรมชั้นเรียน MultiplayerGame(MPG นหรือ MPG B(subclasses)และ MultiplayerGame เป็นคลาสย่อยของเกม(ภาพด้านล่างนี้)

App Model

หมายเหตุ:MultiplayerGame ยังเป็นแบบนามปธรรมรายการ(เช่นเกม)แล้ว"ชั้นเรียน"->"MPG B"

และตอนที่ฉันอยากจะแสดงตัวอย่างเรียนคลาสต่อไปนี้ชั้นเรียนโดยทำ moc วัตถุอยู่ในส่วนแสดงตัวอย่างของโปรแกรมเกี่ยวข้อขัดข้องแต่ฉันไม่รู้ว่าทำไม:

    import SwiftUI
import CoreData
import Combine

struct StandingEditView: View {
    
    //multiplayer game with MPG A or MPG B class
    @Binding var game : MultiplayerGame
    
    @State private var invokeFunction : Bool = false
    
    var body: some View {
        
        VStack{
            
            List{
                
                ForEach(game.players!, id: \.self){ player in
                    
                    HStack{
                        Text("\(player.name)")
                    }
                    
                }
                
            }
            
            Button(action: {
                invokeFunction.toggle()
            }, label: {
                Text("Button")
            })
            
        }
        
    }
}

struct StandingEditView_Previews: PreviewProvider {
    
    static let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
    
    static var previews: some View {
        
        let game : MultiplayerGame = Standing(context: moc)
        
        let p1 : Player = Player(context: moc)
        let p2 : Player = Player(context: moc)
        let p3 : Player = Player(context: moc)
        
        p1.name =  "Player One"
        p2.name =  "Player Two"
        p3.name =  "Player Three"
        
        game.players = [p1,p2,p3]
        
        return StandingEditView(game: .constant(game))
    }
}

และคนเดียว(ไม่ค่าปริยาย)คุณลักษณะของ ผู้เล่น เป็-> variance อนชื่อ:ข้อความ

ฉันยังพยายามกับ AppDelegate แต่นั่นไม่ได้ทำงานด้วยเหมือนกันรึ...

ข้อผิดพลาดต้องเกิดขึ้นเพราะของภาพตัวอย่างและ moc-วัตถุเพราะว่ารหัสตัวมันเอง compiles และอีกมุมมองนี่มองเห็นได้โดยไม่มีข้อผิดพลาด

ขอบคุณสำหรับความช่วยเหลือของ

core-data preview swift swiftui
2021-11-24 01:22:48
2
0

คุณจะต้องตั้งค่างานสำหรับคอนเท็กซ์ของคุณ. คน NSManagedObjectContext ต้องรู้เรื่องของคุณคุณครูแต่พอกลับมา

ต่อไปนี้ StackBuilder เรียนเป็นข้อเสนอ temporary เวอร์ชั่นที่เหมาะสมสำหรับแสดงตัวอย่าง.

private final class StackBuilder {
    
    private let modelName = "Model" // must match your model filename
    
    public enum Configuration {
        case temporary
        case permanent
    }
    
    let configuration: Configuration
    
    public init(_ configuration: Configuration = .permanent) {
        self.configuration = configuration
    }
    
    public func load() throws -> NSPersistentContainer {
        var errors = [Error]()
        let persistentContainer = NSPersistentContainer(name: modelName)
        persistentContainer.persistentStoreDescriptions = [description(for: configuration)]
        persistentContainer.loadPersistentStores { (value, error) in
            if error != nil {
                errors.append(error!)
            }
        }
        if errors.count > 0 {
            throw errors.first!
        }
        return persistentContainer as NSPersistentContainer
    }
    
    private func description(for configuration: Configuration) -> NSPersistentStoreDescription {
        let desc = NSPersistentStoreDescription(url: NSPersistentContainer.defaultDirectoryURL())
        switch configuration {
        case .temporary:
            desc.type = NSInMemoryStoreType
        case .permanent:
            desc.shouldInferMappingModelAutomatically = true
            desc.shouldMigrateStoreAutomatically = true
            desc.type = NSSQLiteStoreType
        }
        return desc
    }
}

มันอาจจะจำเป็นที่จะต้องผ่านตามคอนเท็กซ์เป็นข้อสภาพแวดล้อมเดาใจ

static var previews: some View {
    return StandingEditView(game: .constant(game))
            .environment(\.managedObjectContext, moc)
}
2021-11-24 06:05:30

ฉันต้องโทรหา StackBuilder ชั้นเรียนไหน? เหมือนเกิดข้อผิดพลาด"NSInvalidArgumentException"ดูเหมือนแต่หรับการออกแบบโครงการก็คือสร้างอย่างถูกต้องและอีกมุมมองนี่มองเห็นได้
ProgrammingAverage

และฉันต้องทำอย่างนั้นเพียงสำหรับนางแบบชื่อเหมือน"MPG เป็น"หรือยัง"MPG A+CoreDataClass"และทรัพย์สิน?
ProgrammingAverage

คำตอบที่ดีที่สุด

0

ตั้งแต่ฉันพยายามอื่นทั้งหมดความเป็นไปได้และไม่มีอะไรช่วยฉันมีรสร้างโครงการใหม่และเช็ค CoreData.

งั้นฉันสร้างหลักในชั้นเรียน CoreData แฟ้มและแทนที่ Item กับ Game ใน "ContentView".

ยังใน PersistenceController ฉันแทนที่ Item กับ Game อยู่ใต้ var preview : PersistenceController และสร้างคลาสทั้งหมดกับ codegen "Manual/None".

ตอนนี้ทุกอย่างได้ผล

2021-11-29 07:01:36

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่