如何为类型为CDObject的CoreData对象设置属性,它有一个名为name: String的属性
我现在的问题是,我不知道如何在PreviewProvider中设置name属性
代码如下:
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())
}
}在将其传递给视图之前,我想做一些类似的事情:
let itm = CDObject()
itm.name = "Hello"发布于 2021-05-06 05:16:29
如果您在使用CoreData启动新项目时使用Xcode附带的标准PersistenceController,只需添加下面的方法,这样当您在预览中运行时,Xcode就会返回.preview container。
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
}
}至于其余的部分,你可以使用类似这样的东西。
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
}
}https://stackoverflow.com/questions/67408366
复制相似问题