[Xcode 12.4, Catalina 10.15.6, MacOS Projet à l'aide de SwiftUI et CoreData]
Je suis en train de travailler sur une application pour l'affichage de certaines données que j'ai. La logique métier de l'application fonctionne très bien, et maintenant, j'ai tourné mon attention à l'INTERFACE utilisateur.
Pour le rangement de l'INTERFACE utilisateur, je voudrais obtenir le PreviewProvider
de travail pour chaque vue. J'aimerais aussi que les aperçus pour afficher les données que j'ai déjà dans le CoreData banque de données.
Après beaucoup de frustration, j'ai enfin réussi à obtenir l'aperçu de compiler et d'affichage, mais je ne vois pas de réelles données dans l'aperçu. Il apparaît que, si le NSManagedObjectContext est là, l'aperçu n'a pas choisi n'importe quelle entrée pour l'affichage.
Comment puis-je choisir, dire la 3ème entrée dans ma banque de données à afficher dans l'aperçu?
Ci-dessous mon code pour l'affichage, qui comprend la PreviewProvider
à la fin (comme d'habitude) avec quelques commentaires expliquant la suite.
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
est un CoreData entité (avec un couple de mille entrées), dont chacune possède plusieurs attributs qui comprennent id
, name
et path
(le fichier). CoreDataStack.context
est une référence à la structure indiquée ci-dessous.
Afin d'obtenir une statique NSManagedObjectContext, tel que requis par la PreviewProvider, j'ai ajouté la structure suivante pour mon projet, comme par 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() { ... }
}
Je voudrais, par exemple, à faire passer dans l'entrée avec domain.id == 3
dans l'aperçu.
Comment puis-je faire cela?
(Merci d'avance pour votre attention.)