SwiftUI PreviewProvider CoreData का उपयोग कर दिखाने के लिए विशिष्ट NSManagedObject प्रविष्टि

0

सवाल

[Xcode 12.4, Catalina 10.15.6, MacOS परियोजना का उपयोग कर SwiftUI और CoreData]

मैं काम कर रहा हूँ एक app पर प्रदर्शित करने के लिए कुछ डेटा है । व्यापार तर्क के अनुप्रयोग ठीक काम कर रहा है, और अब मैं के लिए मेरा ध्यान दिया यूआई । आदेश में साफ करने के लिए यूआई, मैं होगा की तरह पाने के लिए PreviewProvider काम के प्रत्येक दृश्य के लिए. मैं भी तरह का पूर्वावलोकन डेटा प्रदर्शित करने के लिए मैं पहले से ही है में CoreData datastore.

बहुत बाद हताशा में, मैं अंत में प्रबंधित करने के लिए पूर्वावलोकन प्राप्त करने के लिए संकलन और प्रदर्शन, हालांकि मैं नहीं देख रहा हूँ किसी भी वास्तविक डेटा पूर्वावलोकन में. यह प्रतीत होता है कि whilst NSManagedObjectContext वहाँ है, पूर्वावलोकन नहीं किया गया है चयनित किसी भी प्रविष्टि प्रदर्शित करने के लिए ।

मैं कैसे कर सकते हैं का चयन करें कहते हैं, 3 प्रविष्टि में मेरे डेटास्टोर में प्रदर्शित करने के लिए पूर्वावलोकन?

नीचे है मेरे कोड के लिए देखने के लिए कि शामिल हैं PreviewProvider अंत में (सामान्य रूप में) कुछ टिप्पणियों के साथ यह समझाने के बाद.

    
    
    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 एक CoreData इकाई (एक हजार प्रविष्टियों), जिनमें से प्रत्येक की कई विशेषताओं में शामिल है कि id, nameहै , और path (फाइल करने के लिए). CoreDataStack.context एक संदर्भ है करने के लिए संरचना नीचे दिखाया गया है.

प्राप्त करने के क्रम में एक स्थिर NSManagedObjectContext, द्वारा आवश्यक के रूप में PreviewProvider, मैं निम्नलिखित संरचना करने के लिए मेरी परियोजना, के रूप में प्रति 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() { ... }
    }

मैं, उदाहरण के लिए, की तरह पारित करने के लिए में प्रवेश के साथ domain.id == 3 पूर्वावलोकन में. मैं ऐसा कैसे कर सकता? (अग्रिम में धन्यवाद आपका ध्यान के लिए.)

core-data swiftui
2021-11-17 02:43:02
1

सबसे अच्छा जवाब

0

मैं काम से बाहर गया था क्या याद में PreviewProvider संरचना:

  1. मैं प्रदर्शन करने के लिए आवश्यक एक NSFetchrequest क्रम में डेटा प्राप्त करने के लिए.
  2. तो, मैं करने में सक्षम था का उपयोग प्रविष्टियों में डेटास्टोर का उपयोग कर सरणी सूचकांक.
    ध्यान दें कि सूचकांक है एक CoreData आंतरिक प्रतिनिधित्व है, और यदि आप चाहते हैं एक विशेष आइटम का उपयोग करें SQLite ब्राउज़ करने के लिए डेटास्टोर एक खोजने के लिए आप चाहते हैं को देखने के लिए.
struct EntriesView_Previews: PreviewProvider {

  @Environment(\.managedObjectContext) var managedObjectContext

  static var previews: some View {
    let context = CoreDataStack.context
    let domainFiles : [DomainFiles]
    let requestDomainFiles : NSFetchRequest<DomainFiles> = DomainFiles.fetchRequest()
    do {
      domainFiles = try context.fetch(requestDomainFiles)
    } catch {
      let nserror = error as NSError
      fatalError("Error \(nserror): \(nserror.userInfo)")   //  DO NOT DO THIS IN REAL CODE.  PROVIDE FALLBACK
    }
    let domain = domainFiles[0]
    return EntriesView(domain: domain)
      .environment(\.managedObjectContext, CoreDataStack.context)
  }
}
2021-11-17 05:01:43

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................