【发布时间】:2021-04-15 06:14:09
【问题描述】:
我最近在我的应用中添加了一个设置窗格,并尝试将其连接到核心数据以让用户管理他们的 api 和 url 设置。
但不幸的是,当我启动我的应用程序并打开设置窗格时,我总是收到一堆错误,告诉我核心数据未正确连接或类似的东西。 - 下面的错误消息
-----------------------------------------
这是我添加设置窗格的 App.swift 文件。
@main
struct RandomAppName: App {
let persistenceController = PersistenceController.shared
@State private var filter = 1
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
.commands { // some command features }
#if os(macOS)
Settings {
SettingsPane()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
#endif
}
}
设置面板本身包含一个带有多个子视图的选项卡视图。
这里有一些代码sn-ps。
import SwiftUI
struct SettingsPane: View {
@Environment(\.managedObjectContext) private var viewContext
@State private var id : Int = 3
var body: some View {
// some content stuff //
if id == 1 || id == 0 { ApiView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) }
// some content stuff //
}
}
还有一些实际的 Api 设置视图
import SwiftUI
struct ApiView: View {
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \APIMaster.timestamp, ascending: true)],
animation: .default)
private var content: FetchedResults<APIMaster>
var body: some View {
// some content stuff //
VStack{
ScrollView{
ForEach(content, id: \.self) { content in
HStack{
Image(systemName: "xserve")
Text(content.hostName)
}
}}
// some content stuff //
} }
struct ApiView_Previews: PreviewProvider {
static var previews: some View {
ApiView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
}
}
在我实现核心数据部分之前,一切正常。
我已经在应用视图中使用核心数据连接测试了 ForEach 循环,并且它工作得非常好。
错误信息是:
2021-01-09 21:28:11.348566+0100 RandomAppName[71835:2714021] [error] 警告:多个 NSEntityDescriptions 声明 NSManagedObject 子类“APIMaster”,因此 +entity 无法消除歧义。
CoreData:警告:多个 NSEntityDescriptions 声明 NSManagedObject 子类“APIMaster”,因此 +entity 无法消除歧义。
2021-01-09 21:28:11.348698+0100 RandomAppName[71835:2714021] [错误] 警告:来自 NSManagedObjectModel (0x600002530230) 的“APIMaster”(0x600003128000) 声称“APIMaster”。
CoreData:警告:来自 NSManagedObjectModel (0x600002530230) 的“APIMaster”(0x600003128000) 声明“APIMaster”。
我希望有人可以帮助我解决这个具体问题。
这是设置窗格的外观。 (我也尝试了“主要”实体)
【问题讨论】:
-
是使用框架解决这个问题的唯一方法吗? - 我的意思是视图的代码仍然在应用程序类中,所以它实际上应该能够访问自己的核心数据模型 - 或者我错了吗?
标签: macos core-data swiftui swift5