[Xcode 12.4, Catalina 10.15.6, SwiftUİ ve CoreData kullanan macOS Projesi]
Sahip olduğum bazı verileri görüntülemek için bir uygulama üzerinde çalışıyorum. Uygulamanın iş mantığı iyi çalışıyor ve şimdi dikkatimi kullanıcı arayüzüne çevirdim.
Kullanıcı arayüzünü düzenli hale getirmek için aşağıdakileri almak istiyorum PreviewProvider
her görünüm için çalışıyor. Önizlemelerin CoreData veri deposunda zaten sahip olduğum verileri görüntülemesini de istiyorum.
Çok fazla hayal kırıklığından sonra nihayet önizlemenin derlenmesini ve görüntülenmesini sağladım, ancak önizlemede herhangi bir gerçek veri göremiyorum. NSManagedObjectContext oradayken önizleme görüntülenecek herhangi bir girdi seçmemiş gibi görünüyor.
Önizlemede görüntülenecek veri deposumdaki 3. girdiyi nasıl seçebilirim?
Aşağıda, aşağıdakileri içeren görünüm için kodum var PreviewProvider
sonunda (her zamanki gibi) bunu açıklayan bazı yorumlarla.
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
her biri aşağıdakileri içeren çeşitli özniteliklere sahip bir CoreData varlığıdır (birkaç bin girişle) id
, name
, ve path
(dosya için). CoreDataStack.context
aşağıda gösterilen yapıya bir referanstır.
Previewprovider'ın gerektirdiği şekilde statik bir NSManagedObjectContext elde etmek için projeme aşağıdaki yapıyı ekledim 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() { ... }
}
Örneğin, girişi şu şekilde iletmek isterim: domain.id == 3
önizlemenin içine.
Bunu nasıl yapabilirim?
(Teşekkürler ilerlemek için senin dikkat.)