我在核心数据中调用
save()
时遇到“[CDIRunningDuration count]:无法识别的选择器发送到实例0x600001a0fed0”错误。模型很简单,我也不知道为什么。
private func runTest() {
let session = CDISession(context: moc)
session.startDate = Date()
let app = NSWorkspace.shared.frontmostApplication!
let runningApp = CDIApp(context: moc)
runningApp.bundleURL = app.bundleURL
let runningDuration = CDIRunningDuration(context: moc)
runningDuration.app = runningApp
runningDuration.timelength = 100.0
runningDuration.session = session
try! moc.save()
}
完整示例在这里。 下载
---更多代码---
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var moc
var body: some View {
VStack(alignment: .leading) {
Text("Hello World!")
}
.padding()
.onAppear(perform: runTest)
}
private func runTest() {
let session = CDISession(context: moc)
session.startDate = Date()
let app = NSWorkspace.shared.frontmostApplication!
let runningApp = CDIApp(context: moc)
runningApp.bundleURL = app.bundleURL
let runningDuration = CDIRunningDuration(context: moc)
runningDuration.app = runningApp
runningDuration.timelength = 100.0
runningDuration.session = session
try! moc.save()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import SwiftUI
@main
struct Core_Data_IssueApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, ModelProvider.shared.container.viewContext)
}
}
}
import Foundation
import CoreData
import AppKit
class ModelProvider:ObservableObject {
let container = NSPersistentContainer(name: "Model")
private init() {
container.loadPersistentStores { description, error in
if let error = error {
let alert = NSAlert(error: error)
NSSound.beep()
alert.runModal()
}
}
}
static let shared = ModelProvider()
}
您的示例中的问题似乎是由关系runningDurations <> app引起的,它在两个方向上都定义为
To One
,这可能不是您想要的。通过将关系 runningDuration > app 更改为 To Many
错误消失并且数据被保存在数据库中。