[Xcode 12.4, Catalina 10.15.6, MacOS Projektu pomocou SwiftUI a CoreData]
Pracujem na aplikáciu na zobrazenie niektorých údajov, čo mám. Obchodnú logiku aplikácie je v poriadku, a teraz som sa obrátil svoju pozornosť na UI.
V záujme tidy up UI, ktoré by som rád dostať na PreviewProvider
práca pre každého pohľadu. Tiež by som rád náhľady ak chcete zobraziť údaje, ktoré som už v CoreData datastore.
Po veľa frustrácie, sa mi konečne podarilo získať náhľad na zostavenie a displeja, avšak nevidím žiadne skutočné údaje v okne s ukážkou. Zdá sa, že zatiaľ čo NSManagedObjectContext je tam, ukážky nebola vybraná žiadna položka na displeji.
Ako môžem si vybrať, povedať, 3. položky v mojom datastore byť zobrazené v okne s ukážkou?
Nižšie je moja kód pre zobrazenie, ktoré obsahuje PreviewProvider
na konci (normálne) s niektorými komentármi vysvetľovať to takto.
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
je CoreData subjekt (s pár tisíc záznamov), z ktorých každá má niekoľko atribútov, ktoré obsahujú id
, name
a path
(súbor). CoreDataStack.context
je odkaz na struct uvedené nižšie.
V snahe získať statické NSManagedObjectContext, ako je požadované podľa PreviewProvider, pridal som takto struct na môj projekt, podľa 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() { ... }
}
Povedal by som, napríklad, ako prejsť vstup s domain.id == 3
do náhľadu.
Ako môžem to urobiť?
(Ďakujem vopred za vašu pozornosť.)