SwiftUI- এ পপওভারে মূল ডেটা সত্তা সংরক্ষণ করা হয়। পরিবেশটি আবার সাবভিউতে না পেরে নীল ইয়ারকে নিক্ষেপ করে


15

সুইফটুআই এবং কোর ডেটা সহ প্লেইন আমাকে কৌতূহলী সমস্যাতে নিয়ে এসেছিল। সুতরাং পরিস্থিতি নিম্নলিখিত:

আমার কাছে একটি প্রধান ভিউ "অ্যাপভিউ" এবং "সাবভিউ" নামে একটি উপদর্শন রয়েছে। আমি পপওভার বা শিট হিসাবে নেভিগেশনটিটলবারে প্লাস বোতামটি ক্লিক করলে সাবভিউ ভিউটি অ্যাপভিউ ভিউ থেকে খোলা হবে।

@Environment(\.managedObjectContext) var managedObjectContext
@State private var modal: Bool = false
...
Button(action: {
        self.modal.toggle()
      }) {
        Image(systemName: "plus")
      }.popover(isPresented: self.$modal){
        SubView()
      }

সাবউইউ ভিউয়ের একটি নাম এবং একটি উপকরণ যুক্ত করতে দুটি টেক্সটফিল্ড অবজেক্টের সাথে সামান্য ফর্ম রয়েছে। এই দুটি অবজেক্টের ইনপুট দুটি পৃথক @ স্টেট বৈশিষ্ট্য দ্বারা পরিচালিত হয়। এই ফর্মের তৃতীয় অবজেক্টটি সরল বোতাম, যা কোরেডাটার জন্য একটি সংযুক্ত গ্রাহক সত্তায় একটি সামনের- এবং উপাধি সংরক্ষণ করতে হবে।

...
@Environment(\.managedObjectContext) var managedObjectContext
...
Button(action: {
  let customerItem = Customer(context: self.managedObjectContext)
  customerItem.foreName = self.forename
  customerItem.surname = self.surname

  do {
    try self.managedObjectContext.save()
  } catch {
    print(error)
  }
}) {
  Text("Speichern")
}

আমি যদি গ্রাহক সত্তাকে এইভাবে সংরক্ষণ করার চেষ্টা করি তবে আমি ত্রুটিটি পেয়েছি: "নীলারর", বিশেষত: "অমীমাংসিত ত্রুটি ত্রুটি ডোমেন = ফাউন্ডেশন _

তবে বের করার পরে, আমি যখন .environment(\.managedObjectContext, context)সাবভিউ () কলটিতে যুক্ত করি তখন এটি একটি কবজির মতো SubView().environment(\.managedObjectContext, context)কাজ করে।

কেউ কি জানেন, কেন আমাকে দ্বিতীয়বার পরিচালিতঅবজেক্ট কনটেক্সট পাস করতে হবে? আমি ভেবেছি, দৃশ্যাবলী.সুইফ্টের মতো পুরো ভিউ হায়ারার্কিতে এটি ব্যবহার করার জন্য আমাকে কেবলমাত্র পরিচালিতঅবজেক্ট কনটেক্সট পাস করতে হবে:

    // Get the managed object context from the shared persistent container.
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    // Create the SwiftUI view and set the context as the value for the managedObjectContext environment keyPath.
    // Add `@Environment(\.managedObjectContext)` in the views that will need the context.
    let contentView = AppView().environment(\.managedObjectContext, context)

এটি কি সাবভিউ () কে এইভাবে কল করার কারণে, দর্শনটি ভিউয়ের স্তরক্রমের অংশ নয়? আমি এটা বুঝতে পারি না ...


1
আমি আইওএস 13.1 এ একই আচরণ পর্যবেক্ষণ করেছি। এক্সকোড 11.1
অরুণ পত্র

আপনি এই সমস্যাটি সন্ধানকারী প্রথম নন, আমি পরামিতি হিসাবে প্রসঙ্গটি পেরিয়ে সমাধান করেছি। আশা করি শীঘ্রই অ্যাপল এটিকে ঠিক করে দেবে।
মাইকেল সালমন

1
প্রত্যাশিত হিসাবে এটি সুইফট / সুইফট ইউআই এর সংকলকটিতে একটি বাগ বলে মনে হচ্ছে। সুতরাং অ্যাপল থেকে হারলান হাসকিন্স আমাকে তার জন্য একটি নিশ্চয়তা দিয়েছে: বাগস.সউইফট.আর / ব্রাউজ / এসআর ১১-১607 - - সুতরাং আমি আশা করি এটি শিগগিরই ঠিক হয়ে যাবে। দ্রুত ফিক্সের জন্য: সাবউভিউ পপওভার কাজের কাছে পরিবেশ (en। পরিচালিতঅজেক্টকন্টেক্সট, প্রসঙ্গ) পাস করা।
lukas_nitaco

উত্তর:


24

বাহ এই আমার সন্ধান করুন! বিশেষত কারণ ত্রুটিগুলি আপনাকে কীভাবে ঠিক করতে হবে সে সম্পর্কে কোনও তথ্য দেয় না tells

এক্সকোডে বাগটি সমাধান না হওয়া পর্যন্ত এখানে ফিক্সটি রয়েছে:

        .navigationBarItems(trailing:
            Button(action: {
                self.add = true
            }, label: {
                Text("Add Todo List")
            }).sheet(isPresented: $add, content: {
                AddTodoListView().environment(\.managedObjectContext, managedObjectContext)
            })
        )

কেবলমাত্র .environment(\.managedObjectContext, managedObjectContext)আপনার গৌণ দর্শন যুক্ত করুন (একটি মডেল, এই উদাহরণে)।


8
এই মুহুর্তে সুইফটুইতে বিকাশের জন্য যথেষ্ট সাহসী আমাদের সকলের জন্য অপরিসীম সহায়তা ...
অ্যাপোস্টোলোস এপোস্টোলিডিস

আমার সমস্যাও সমাধান করেছেন। ধন্যবাদ.
পি এন্ট

1
আমার শহরবাসী! সুইফটআইআই কেন এটি প্রয়োজনীয় করে? পরিবেশ বিশ্বব্যাপী অ্যাক্সেস করা উচিত।
পালস 4 লাইফ

তবে কেন এটি প্রয়োজনীয়? সত্যিই আশ্চর্যের বিষয় যে সুইফটইউআই এটি স্বয়ংক্রিয়ভাবে তৈরি করে না ...
লরিস ফয়ে

এটি প্রয়োজনীয় কারণ এটি এখনই বাগের একমাত্র সমাধান। আপেল দৃশ্যত একটি স্থির উপর কাজ করছে। মনে রাখবেন SwiftUI এখনও খুব নতুন।
stardust4891
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.