首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PreviewProvider和ObservedObject属性

PreviewProvider和ObservedObject属性
EN

Stack Overflow用户
提问于 2021-05-06 04:30:23
回答 1查看 156关注 0票数 1

如何为类型为CDObject的CoreData对象设置属性,它有一个名为name: String的属性

我现在的问题是,我不知道如何在PreviewProvider中设置name属性

代码如下:

代码语言:javascript
复制
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())
    }
}

在将其传递给视图之前,我想做一些类似的事情:

代码语言:javascript
复制
let itm = CDObject()
itm.name = "Hello"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-06 05:16:29

如果您在使用CoreData启动新项目时使用Xcode附带的标准PersistenceController,只需添加下面的方法,这样当您在预览中运行时,Xcode就会返回.preview container

代码语言:javascript
复制
    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
        }
    }

至于其余的部分,你可以使用类似这样的东西。

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67408366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档