SwiftUI预崩溃的核心数据'NSInvalidArgumentException'

0

的问题

我有问题我不能预视我的应用程序画布上,因为我总是得到错误:

"终止的程序由于未捕获到异常 'NSInvalidArgumentException',原因:'一个十分整洁的类 '应用程序。MPG_A'必须有一个有效的NSEntityDescription."

现在更加详细的:在看我想预我们一@结合的抽象类MultiplayerGame(英里的一个或转B(子类)和MultiplayerGame是一个子类的游戏(下图)

App Model

评论:MultiplayerGame也是一个抽象的实体(如游戏)和"类别"->"英里的B"

当我想要的预览本类下列类通过使交通部目在预览我的应用程序的崩溃,但我不知道为什么:

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

而唯一(不默认)属性的 播放器 就是-> var name:String

我也试过但如没有工作。

错误发生,因为预和商务部对象,因为本身的代码汇编和其他意见都是可见的,没有一个错误。

谢谢你的帮助!

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

做我必须做的,只有为的型号名称,如"加一"或"英里的一个+CoreDataClass"和财产?
ProgrammingAverage

最好的答案

0

因为我已经试过所有其他的可能性并没有什么帮助,我已经创建了一个新的项目,并检查 CoreData.

然后我创造的主要类 CoreData 文件和替换 ItemGame"ContentView".

还在的 PersistenceController 我换的 ItemGamevar preview : PersistenceController 和创造所有类代码 "Manual/None".

现在一切工作。

2021-11-29 07:01:36

其他语言

此页面有其他语言版本

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