[Xcode 12.4, Catalina 10.15.6, MacOS Proiect folosind SwiftUI și CoreData]
Lucrez la o aplicație pentru a afișa unele date am. Logica de business a aplicației este de lucru bine, și acum mi-am îndreptat atenția asupra UI.
În scopul de a pune în ordine UI, mi-ar place pentru a obține PreviewProvider
de lucru pentru fiecare vizualizare. Am dori, de asemenea, avanpremiera pentru a afișa date deja am în CoreData datastore.
După multă frustrare, am reușit în cele din urmă pentru a obține o previzualizare a compila și de a afișa, totuși eu nu văd niciun fel de date reale în previzualizare. Se pare că, deși NSManagedObjectContext este acolo, previzualizare nu a selectat nici o intrare pentru a afișa.
Cum pot selecta, să zicem a 3-a intrare în datastore pentru a fi afișate în previzualizare?
Mai jos este codul meu de vedere, care include PreviewProvider
la sfârșitul (normal), cu unele comentarii, explicând că în urma.
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
este un CoreData entitate (cu câteva mii de intrări), fiecare dintre care are mai multe atribute care includ id
, name
și path
(la dosar). CoreDataStack.context
este o referință la struct prezentat mai jos.
În scopul de a obține un statice NSManagedObjectContext, în conformitate cu PreviewProvider, am adăugat următoarele struct pentru proiectul meu, ca pe 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() { ... }
}
Mi-ar fi, de exemplu, ca pentru a trece în rubrica cu domain.id == 3
în previzualizare.
Cum pot face asta?
(Vă mulțumim anticipat pentru atenția dumneavoastră.)