斯威夫特。使用Coredata预览–人口,单身和怪异的行为
我有一个小型应用程序,可以将任意事件添加到Coredata。 而且我正在努力准备预览数据。
正确的行为
在预览窗口中,我看到一个带有内容“测试事件”的文本
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
//init coredata
let container = NSPersistentContainer(name: "Model")
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
container.loadPersistentStores() { description, error in
if let error = error {
print("Can't load core data \(error.localizedDescription)")
}
}
//adding event
let event = Event(context: container.viewContext)
event.id = UUID()
event.name = "Test"
try! container.viewContext.save()
//getting events
let request = Event.fetchRequest()
let events = try! container.viewContext.fetch(request)
//view
return VStack {
ForEach(events, id: \.id) { event in
Text("\(event.id?.uuidString ?? "") \(event.name ?? "") fs")
}
}
}
,但是如果我尝试将逻辑移至datacontroller,我会得到7个具有相同的文本块名称,但是不同的uuids
class DataController {
static let preview = DataController()
private(set) var container: NSPersistentContainer
private init(inMemory: Bool = false) {
self.container = NSPersistentContainer(name: "Model")
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
container.loadPersistentStores() { description, error in
if let error = error {
fatalError("Can't load core data \(error.localizedDescription)")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static let dataController = DataController.preview
static var previews: some View {
//adding event
let event = Event(context: dataController.container.viewContext)
event.id = UUID()
event.name = "Test event"
try! dataController.container.viewContext.save()
//getting events
let request = Event.fetchRequest()
let events = try! dataController.container.viewContext.fetch(request)
//view
return VStack {
ForEach(events, id: \.id) { event in
Text("\(event.id?.uuidString ?? "") \(event.name ?? "")")
}
}
}
}
是什么可能导致此类行为?
模型是手动生成的。我更改的唯一一件事 - 评论@Objc(event),因为使用此语句的预览根本不起作用。
I have a small app which can add and save arbitrary Events to CoreData.
And I'm struggling with preparing of preview data.
Correct behaviour
In preview window I see one text with content "Test event"
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
//init coredata
let container = NSPersistentContainer(name: "Model")
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
container.loadPersistentStores() { description, error in
if let error = error {
print("Can't load core data \(error.localizedDescription)")
}
}
//adding event
let event = Event(context: container.viewContext)
event.id = UUID()
event.name = "Test"
try! container.viewContext.save()
//getting events
let request = Event.fetchRequest()
let events = try! container.viewContext.fetch(request)
//view
return VStack {
ForEach(events, id: \.id) { event in
Text("\(event.id?.uuidString ?? "") \(event.name ?? "") fs")
}
}
}
But if I try to move logic to DataController, I get 7 Text blocks with the same name, but different UUIDs
class DataController {
static let preview = DataController()
private(set) var container: NSPersistentContainer
private init(inMemory: Bool = false) {
self.container = NSPersistentContainer(name: "Model")
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
container.loadPersistentStores() { description, error in
if let error = error {
fatalError("Can't load core data \(error.localizedDescription)")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static let dataController = DataController.preview
static var previews: some View {
//adding event
let event = Event(context: dataController.container.viewContext)
event.id = UUID()
event.name = "Test event"
try! dataController.container.viewContext.save()
//getting events
let request = Event.fetchRequest()
let events = try! dataController.container.viewContext.fetch(request)
//view
return VStack {
ForEach(events, id: \.id) { event in
Text("\(event.id?.uuidString ?? "") \(event.name ?? "")")
}
}
}
}
What can cause such behaviour?
Model for Event was manually generated. The only thing I changed – commenting @objc(Event), because with this statement preview doesn't work at all.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论