नेवीगेशनलिंक केवल एक बार के लिए काम करता है


75

मैं लॉगिन के साथ एक एप्लिकेशन पर काम कर रहा था और लॉगिन के बाद सूचीबद्ध श्रेणियां हैं। और प्रत्येक श्रेणी के तहत कुछ आइटम क्षैतिज रूप से सूचीबद्ध हैं। लॉगिन के बाद बात है, मुख्य पृष्ठ दिखाई देता है और सब कुछ महान सूचीबद्ध है। जब आप किसी आइटम पर क्लिक करते हैं तो यह विस्तृत स्क्रीन पर जाता है लेकिन जब आप वापस जाने की कोशिश करते हैं तो यह दुर्घटनाग्रस्त हो जाता है। मुझे यह प्रवाह मिला कि `स्विफ्टबाइक` को` नैविगेशन व्यू` में `नैविगेशन`टाइम्स` के अंदर रखने के बाद पीछे की ओर नेविगेट करने पर मेरा स्विफ्टयूआई ऐप क्रैश क्यों होता है? लेकिन मैं अपनी समस्या को हल नहीं कर सका। चूंकि मेरा प्रोजेक्ट जटिल हो गया है, मैं बस स्विफ्टुई में नेविगेशन का अभ्यास करना चाहता था और मैंने एक नया प्रोजेक्ट बनाया। वैसे मैंने नवीनतम xcode संस्करण 11.3 डाउनलोड किया है। मैंने एक सरल कोड इस प्रकार लिखा है:

NavigationView{
        NavigationLink(destination: Test()) {
            Text("Show Detail View")
        }
    .navigationBarTitle("title1")

और परीक्षण () दृश्य इस प्रकार है:

import SwiftUI

struct Test: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}

जैसा कि आप देख सकते हैं यह वास्तव में सरल है। मैंने भी इंटरनेट पर इसी तरह के उदाहरणों की कोशिश की थी लेकिन यह काम करने के तरीके को काम नहीं करता है। जब मैं प्रोजेक्ट चलाता हूं, तो मैं नेविगेशन लिंक पर क्लिक करता हूं और यह टेस्ट () दृश्य पर नेविगेट करता है। फिर मैं बैक बटन पर क्लिक करता हूं और यह मुख्य पेज पर जाता है। हालाँकि, जब मैं दूसरी बार नेविगेशन लिंक पर क्लिक करता हूं, तो कुछ भी नहीं होता है। नेविगेशन लिंक केवल एक बार काम करता है और उसके बाद कुछ नहीं होता है। यह नेविगेट नहीं करता है, यह किसी भी त्रुटि को नहीं फेंकता है। मैं स्विफ्टुई में नया हूं और सब कुछ बहुत अच्छा है लेकिन नेविगेशन। मैंने कई उदाहरणों की कोशिश की और इंटरनेट पर समाधान का सुझाव दिया, लेकिन कुछ भी मेरे मुद्दों को ठीक नहीं करता है।


2
xCode 11.2 (11B52) का संस्करण, यह कोड कैनवास और डिवाइस दोनों पर अपेक्षित रूप से काम करता है
Александр Грабовский

3
Xcode 11.2 / iOS 13.2 के साथ अपने कोड स्नैपशॉट का परीक्षण किया - अच्छी तरह से काम करता है। Xcode को डाउनग्रेड करने का प्रयास करें।
अस्पररी

1
Xcode संस्करण 11.2.1 (11B500) आपका कोड काम करता है जैसा कि इसे करना चाहिए।
नलोव

2
मैंने Apple को एक समीक्षा भेजी, यह भविष्य के अपडेट के लिए प्रतीक्षा करने के लिए बनी हुई है
Александр Грабовский

1
भेजा बग रिपोर्ट FB7518930
Pacu

जवाबों:


56

[अद्यतन] 12 फरवरी, 2020 - मैंने Xcode 11.4 बीटा में इस मुद्दे की जाँच की और पाया कि यह समस्या हल हो गई है।


मुझे अपनी परियोजना में भी यही मुद्दा मिल रहा था, जब मैं एक्सकोड के सिम्युलेटर में इसका परीक्षण कर रहा था। हालाँकि, जब मैंने एक वास्तविक डिवाइस (iOS 13.3 के साथ iPhone X) पर ऐप लॉन्च किया, तो NavigationLinkपूरी तरह से ठीक काम कर रहा था। तो, यह वास्तव में Xcode बग की तरह लगता है।


10
मेरे लिए बिल्कुल वैसा ही। मैं एक नए ऐप के लिए स्विफ्टई को चुने जाने पर पछतावा करने लगा हूं
TheMouk

6
मैं सिर्फ 4 घंटे बहुत बेवकूफ महसूस कर रहा था ... यह सामान तैयार नहीं है ...
सेबस्टियन

SwiftUI अभी भी मूल रूप से संस्करण 1.0 है। क्या आपने कभी किसी उत्पादन रिलीज के लिए v 1.0 का उपयोग करने की योजना बनाई है? आप इसे इस उम्मीद के साथ शुरू करते हैं कि इसमें सुधार होगा। इससे पहले कि आप जारी करने की जरूरत है यह मदद नहीं करता है।
डेविड रीच

@DavidReich यदि SwiftUI बीटा में था, तो मैं समझ सकता था कि बहुत सारे मुद्दे होंगे। उत्पादन में तैयार टूलींग में, कम से कम एक को उम्मीद है कि यह काम करता है। पिछले साल शुरुआती रिलीज के बाद से आईओएस और मैकओएस के कई "पॉइंट अपडेट" हुए हैं, इसलिए इस तरह की चमक वाले कीड़े या "जंपिंग लिस्ट टाइटल बग" को बहुत पहले स्क्वैश किया जाना चाहिए था। मैंने इसे एक प्रोडक्शन ऐप के लिए इस्तेमाल करने की कोशिश की, लेकिन एक अच्छा नतीजा पाने के लिए उसे UIKit में वापस जाना पड़ा।
जीजे निल्सन

3
[अद्यतन] 12 फरवरी, 2020 - मैंने Xcode 11.4 बीटा में इस मुद्दे की जाँच की और पाया कि यह समस्या हल हो गई है।
सगुन राज लागे

5

सिम्युलेटर 11.4: यह समस्या ठीक हो गई है

आपको isActiveदूसरे दृश्य में डिफ़ॉल्ट मान को रीसेट करना होगा । यह डिवाइस और एमुलेटर पर काम करता है।

struct NavigationViewDemo: View {
    @State var isActive = false

    var body: some View {
        NavigationView {
            VStack {
                Text("View1")
                NavigationLink(
                    destination: NavigationViewDemo_View2(isActive: $isActive),
                    isActive: $isActive,
                    label: { Button(action: { self.isActive = true }, label: { Text("click") }) })
            }
        }
    }
}

struct NavigationViewDemo_View2: View {
    @Binding var isActive: Bool

    var body: some View {
        Text("View2")
            .navigationBarItems(leading: Button(action: { self.isActive = false }, label: { Text("Back") }))
    }
}

मैं एक बार से अधिक काम करने के लिए नेविगेशनलिंक प्राप्त करने पर सिम्युलेटर और मेरे भौतिक उपकरण दोनों के साथ समस्या कर रहा हूं। यह सिम्युलेटर में कुछ भी ठीक नहीं करता है, लेकिन इसी तरह की एक विधि जो मेरे भौतिक उपकरण के लिए काम करती है, व्यू 2 पर एक onDisappear सेट कर रही है जो सक्रिय ध्वज को रीसेट करता है। यह एक Xcode बग के लिए एक मामूली क्लीनर वर्कअराउंड है (क्योंकि आपको ऐसी स्थिति में बांधने की ज़रूरत नहीं है कि View2 के बारे में पता नहीं होना चाहिए)। NavigationViewDemo_View2 ()। OnDisappear (प्रदर्शन: {self.isActive = false})
SJoshi

@ जोशी मुझे मिल गया लेकिन onDisappear बाद isActiveमें कहा जाएगा कि यह गलत है, इसलिए नेविगेशन व्यू ठीक से काम नहीं करेगा। यह केवल एमुलेटर के लिए अस्थायी समाधान है क्योंकि नेविगेशन व्यू उपकरणों पर सही ढंग से काम करता है। एमुलेटर के पिछले संस्करणों में नेवीगेशन ने मुझे उम्मीद है कि यह भविष्य के एमुलेटर में तय किया जाएगा।
विक्टर कुश्नरोव

अजीब तरह से, यह कोड मेरे सिम्युलेटर या भौतिक उपकरण पर काम नहीं करता है - मैंने जो प्रस्ताव प्रस्तावित किया था, वह सक्रिय ध्वज को रीसेट करता है जब विस्तार दृश्य खारिज हो जाता है, और भौतिक डिवाइस को काम करने की अनुमति देता है। सड़क पर शब्द यह है कि Xcode 13.4 इस समस्या को ठीक करता है
SJoshi

मैंने सिम्युलेटर 11.3.1 पर परीक्षण किया यह एक आकर्षण की तरह काम करता है। आप देखते हैं 3 शुरू होता है मुझे लगता है कि दूसरों ने भी मदद की।
विक्टर कुश्नरोव

हां, मुझे भी, उस पर परीक्षण किया गया - कई आईफ़ोन का उपयोग करते हुए। इसके अलावा, 4 भौतिक उपकरणों पर परीक्षण किया गया - कोई भाग्य नहीं। यह बग निश्चित रूप से एक हास्यास्पद है। मैं इस बीच सिम्युलेटर के लिए कुछ हास्यास्पद काम कर रहा था।
सोजोशी

3

संभवतः यह तब हल किया जाएगा जब Apple संबंधित बग को ठीक करता है जो 13.3 को परिनियोजन लक्ष्य के रूप में चयन करने से रोकता है

मैं हर किसी के समान मुद्दे का सामना कर रहा हूं। यह समस्या 13.2 चल रहे सिम्युलेटर और पूर्वावलोकन में मौजूद है, लेकिन मेरे अपने डिवाइस पर 13.3 पर चलने पर नियत की जाती है।


1

जैसा कि @ Александр Грабовский ने कहा कि यह एक Xcode 11.3 बग की तरह लगता है, मैं एक ही समस्या का सामना कर रहा हूं, आपको नीचे दिए गए कस्टम बैक बटन जैसे कुछ वर्कअराउंड डाउनग्रेड करना होगा या उपयोग करना होगा

struct ContentView: View {
    @State private var pushed: Bool = false

    var body: some View {

        NavigationView {
            VStack {
                Button("Show Detail View") {
                    self.pushed.toggle()
                }

                NavigationLink(destination: Test(pushed: $pushed), isActive: $pushed) { EmptyView() }
            }.navigationBarTitle("title1")
        }
    }
}
struct Test: View {
    @Binding var pushed: Bool
    var body: some View {
        Text("Hello, World!")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: BackButton(label: "Back") {
                self.pushed = false
            })
    }
}
struct BackButton: View {
    let label: String
    let closure: () -> ()

    var body: some View {
        Button(action: { self.closure() }) {
            HStack {
                Image(systemName: "chevron.left")
                Text(label)
            }
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.