[Xcode 12.4, Catalina 10.15.6, MacOS Projektu pomocí SwiftUI a CoreData]
Já jsem pracoval na aplikace pro zobrazení některých dat, které mám. Obchodní logiky aplikace je v pořádku, a teď jsem se obrátil svou pozornost na uživatelské ROZHRANÍ.
Za účelem uklidit UI, chtěl bych se dostat na PreviewProvider
pracuje pro každé zobrazení. Také bych rád na náhledy pro zobrazení data už mám v CoreData datastore.
Po velké zklamání, jsem konečně podařilo získat náhled do kompilace a zobrazí, nicméně nevidím žádné skutečné údaje v náhledu. Zdá se, že zatímco NSManagedObjectContext je tam náhled není vybrán vstup, který chcete zobrazit.
Jak mohu vybrat, řekněme 3 vstup v mé datového úložiště se zobrazí v náhledu?
Níže je můj kód pro zobrazení, která obsahuje PreviewProvider
na konci (jako normální), s některými komentáře vysvětlující je následující.
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íci záznamy), z nichž každý má několik atributů, které zahrnují id
, name
a path
(do souboru). CoreDataStack.context
je odkaz na struct je uvedeno níže.
S cílem získat statické NSManagedObjectContext, jak to vyžaduje PreviewProvider, jsem přidal následující struct do mého projektu, dle 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() { ... }
}
Chtěl bych, například, jako projít v položce s domain.id == 3
do náhledu.
Jak to mohu udělat?
(Díky předem za vaši pozornost.)