PreviewProvider 和 ObservedObject 属性 [英] PreviewProvider and ObservedObject properties

查看:31
本文介绍了PreviewProvider 和 ObservedObject 属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何为类型为 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆