致命错误:“尝试!”表达式意外引发错误:SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer)

问题描述 投票:0回答:1

我将 SwiftData 与 iCloud 结合使用用于私人项目来存储和同步凭据。由于我有不同的模型,因此我需要一个用于

UntisConfiguration
ElternportalCredentials
的通用容器。

自从我将模型从

ElternpotalLoginModel
重命名为
ElternportalCredentials
以来,该应用程序总是在我的真实 iPhone 上崩溃并出现以下错误:

MyApp/ParentPortalCredentialsDataSource.swift:21: Fatal error: 'try!' expression unexpectedly raised an error: SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer)


@Model
final class ElternportalCredentials {

    var mail: String = ""
    var password: String = ""
    
    init(elternportalMail: String = "", elternportalPassword: String = "") {
        self.mail = elternportalMail
        self.password = elternportalPassword
    }
    
}
final class ElternportalCredentialsDataSource {
    private let modelContainer: ModelContainer
    private let modelContext: ModelContext

    @MainActor
    static let shared = ElternportalCredentialsDataSource()

    @MainActor
    private init() {
        let config = ModelConfiguration(groupContainer: .identifier("com.company.myapp"))
        self.modelContainer = try! ModelContainer(for: ElternportalCredentials.self, UntisConfiguration.self, configurations: config)
        self.modelContext = modelContainer.mainContext
    }

    func saveCredentials(credentials: ElternportalCredentials) {
        modelContext.insert(credentials)
        do {
            try modelContext.save()
        } catch {
            fatalError(error.localizedDescription)
        }
    }

    func fetchCredentials() -> [ElternportalCredentials] {
        do {
            return try modelContext.fetch(FetchDescriptor<ElternportalCredentials>())
        } catch {
            fatalError(error.localizedDescription)
        }
    }

    func removeOldCredentials() {
        let credentials = fetchCredentials()
        
        for credential in credentials {
            modelContext.delete(credential)
        }
    }
}

奇怪的是,当我在新创建的模拟器中启动应用程序时,这种情况不会发生。不幸的是,我无法测试该错误是否也发生在未安装以前版本的应用程序的新物理设备上。

swift cloudkit swift-data
1个回答
0
投票

我已通过执行以下操作解决了我的问题:

  1. 导航到应用程序标识符>我的应用程序>应用程序组。

  2. 添加应用组,如下图:

  3. 转到 Xcode 项目中的功能并配置容器。

它应该看起来像这样:

  1. 最后,在代码中使用新创建的容器:
    let config = ModelConfiguration(groupContainer: .identifier("group.com.company.MyApp"))
© www.soinside.com 2019 - 2024. All rights reserved.