[Xcode 12.4, Catalina 10.15.6, MacOS Progetto utilizzando SwiftUI e CoreData]
Sto lavorando su un'applicazione per la visualizzazione di alcuni dati che ho. La logica di business dell'applicazione sta lavorando bene, e ora ho rivolto la mia attenzione per l'interfaccia utente.
Al fine di riordinare l'interfaccia utente, vorrei ottenere i PreviewProvider
di lavoro per ogni vista. Vorrei, inoltre, le anteprime per visualizzare i dati che ho già in CoreData datastore.
Dopo tanta frustrazione, finalmente sono riuscito ad avere l'anteprima per la compilazione e la visualizzazione, tuttavia non riesco a vedere alcuna effettiva dati in anteprima. Sembra che, mentre il NSManagedObjectContext c'è, l'anteprima non ha selezionato una voce per visualizzare.
Come faccio a selezionare, a dire il 3 ° entrata nel mio archivio dati per essere visualizzati in anteprima?
Di seguito è il mio codice per la visualizzazione che include la PreviewProvider
alla fine (come di consueto) con alcuni commenti che spiegano in seguito.
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
è un CoreData entità (con un paio di migliaia di voci), ognuno dei quali ha diversi attributi che includono id
, name
e path
(il file). CoreDataStack.context
è un punto di riferimento per la struttura mostrato di seguito.
Al fine di ottenere una statico NSManagedObjectContext, come richiesto dal PreviewProvider, ho aggiunto la seguente struttura per il mio progetto, come per 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() { ... }
}
Vorrei, per esempio, come passare la voce con domain.id == 3
in anteprima.
Come posso fare questo?
(Grazie in anticipo per la vostra attenzione.)