[Xcode 12.4, Catalina 10.15.6, MacOS Proyecto con SwiftUI y CoreData]
Estoy trabajando en una aplicación para mostrar algunos datos que tengo. La lógica de negocio de la aplicación está trabajando muy bien, y ahora he vuelto mi atención a la interfaz de usuario.
Con el fin de adecentar la interfaz de usuario, me gustaría obtener la PreviewProvider
de trabajo para cada vista. También me gustaría que las vistas previas para mostrar los datos que ya tengo en el CoreData almacén de datos.
Después de tanta frustración, finalmente me las arreglé para obtener la vista previa para recopilar y mostrar, sin embargo, yo no estoy viendo ninguna de datos reales en la vista previa. Parece que mientras que la NSManagedObjectContext está allí, la vista previa no ha seleccionado ninguna entrada para mostrar.
¿Cómo puedo seleccionar, decir la 3ª entrada en mi almacén de datos se muestra en la vista previa?
A continuación es mi código para la vista que incluye el PreviewProvider
al final (como de costumbre) con algunos comentarios que explican lo siguiente.
import SwiftUI
struct DomainRow: View {
@Environment(\.managedObjectContext) var context
@ObservedObject var domain : DomainFiles
private var id : LocalizedStringKey {
get {
return LocalizedStringKey(String(Int(domain.id)))
}
}
var body: some View {
HStack (alignment: .center) {
Text(id)
Spacer()
VStack(alignment: .leading) {
Text(domain.name!)
.fontWeight(.bold)
.truncationMode(.tail)
.frame(minWidth: 20)
Text(domain.path!)
.font(.caption)
.opacity(0.625)
.truncationMode(.middle)
}
}
.padding(.vertical, 4)
}
}
#if DEBUG
struct DomainRow_Previews: PreviewProvider {
@Environment(\.managedObjectContext) var managedObjectContext
static var previews: some View {
let context = CoreDataStack.context
let domain = DomainFiles(context: context)
return DomainRow(domain: domain)
.environment(\.managedObjectContext, CoreDataStack.context)
}
}
#endif
DomainFiles
es un CoreData entidad (con un par de miles de entradas), cada uno de los cuales tiene varios atributos que incluyen id
, name
y path
(el archivo). CoreDataStack.context
es una referencia a la estructura que se muestra a continuación.
Con el fin de obtener una estática NSManagedObjectContext, como es requerido por la PreviewProvider, he añadido la siguiente estructura para mi proyecto, como por https://developer.apple.com/forums/thread/650269
import Foundation
import CoreData
struct CoreDataStack {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static let containerName: String = "MyAppsDataStore"
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: containerName)
container.loadPersistentStores { (description, error) in
if let error = error {
print(error)
}
}
return container
}()
// Don't need to save anything in the preview.
// func saveContext() { ... }
}
Yo, por ejemplo, como para pasar de la entrada con domain.id == 3
en la vista previa.
¿Cómo puedo hacer esto?
(Gracias de antemano por su atención.)