[Xcode 12.4, Catalina 10.15.6, MacOS Projeto usando SwiftUI e CoreData]
Eu estou trabalhando em um aplicativo para apresentar alguns dados que eu tenho. A lógica de negócios do aplicativo está funcionando bem, e agora eu virei a minha atenção para a INTERFACE do usuário.
Em ordem para arrumar o UI, eu gostaria de obter o PreviewProvider
de trabalho para cada modo de exibição. Eu gostaria de visualizações para exibir dados já tenho no CoreData armazenamento de dados.
Depois de muita frustração, eu finalmente consegui a visualização para compilar e apresentar, no entanto, eu não estou vendo nenhuma real de dados na pré-visualização. Parece que enquanto o NSManagedObjectContext está lá, a pré-visualização não tiver selecionado qualquer entrada para exibir.
Como posso selecionar, dizem que a 3ª entrada no meu arquivo de dados a ser apresentado na pré-visualização?
Abaixo está o meu código para o modo de exibição que inclui o PreviewProvider
no final (como normal) com alguns comentários explicando-lhe a seguinte.
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
é um CoreData entidade (com um par de mil entradas), cada um dos quais tem vários atributos que incluem id
, name
e path
(o arquivo). CoreDataStack.context
é uma referência para a estrutura mostrada abaixo.
Para obter uma estático NSManagedObjectContext, conforme exigido pelo PreviewProvider, eu adicionei a seguinte estrutura para o meu projeto, 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() { ... }
}
Eu, por exemplo, como passar na entrada com domain.id == 3
para a visualização.
Como posso fazer isso?
(Agradecemos antecipadamente por sua atenção.)