PreviewProvider 和 ObservedObject 属性 [英] PreviewProvider and ObservedObject properties
问题描述
如何为类型为 CDObject
的 CoreData 对象设置属性,它有一个名为 name: String
how can I set a property to my CoreData Object which has the type CDObject
, it has a property called name: String
我现在的问题是我不知道如何在 PreviewProvider
My issue is now that I do not know how to set the name property in the PreviewProvider
代码如下:
struct MainView: View {
@ObservedObject var obj: CDObject
var body: some View {
Text("Hello, World!")
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView(obj: CDObject())
}
}
在将它传递给视图之前,我想做一些类似的事情:
I would like to do something like, before passing it to the View:
let itm = CDObject()
itm.name = "Hello"
推荐答案
如果您在使用 CoreData 启动新项目时使用 Xcode 附带的标准 PersistenceController
只需添加以下方法,以便 Xcode在预览中运行时返回 .preview
container
.
If you are using the standard PersistenceController
that comes with Xcode when you start a new project with CoreData just add the below method so Xcode returns the .preview
container
when you are running in preview.
public static func previewAware() -> PersistenceController{
//Identifies if XCode is running for previews
if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"{
return PersistenceController.preview
}else{
return PersistenceController.shared
}
}
至于其余的你可以使用这样的东西.
As for the rest you can use something like this.
import SwiftUI
import CoreData
struct SamplePreviewView: View {
@ObservedObject var item: Item
var body: some View {
Text(item.timestamp?.description ?? "nil")
}
}
struct SamplePreviewView_Previews: PreviewProvider {
static let svc = CoreDataPersistenceService()
static var previews: some View {
SamplePreviewView(item: svc.addSample())
}
}
class CoreDataPersistenceService: NSObject {
var persistenceController: PersistenceController
init(isTest: Bool = false) {
if isTest{
self.persistenceController = PersistenceController.preview
}else{
self.persistenceController = PersistenceController.previewAware()
}
super.init()
}
func addSample() -> Item {
let object = createObject()
object.timestamp = Date()
return object
}
//MARK: CRUD methods
func createObject() -> Item {
let result = Item.init(context: persistenceController.container.viewContext)
return result
}
}
这篇关于PreviewProvider 和 ObservedObject 属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!