Xcode "önkoşul hatası" hata ayıklama nasıl?


9

Xcode 11'de bir SwiftUI Uygulaması oluşturuyorum, ancak uygulamadaki belirli bir sekmeye geçtiğimde hemen sonlandırılıyor.

Şey, her zaman Application Delegatedosyaya işaret ediyor , ki bu gerçekten sorun değil. Ayrıca konsolda bu hatayı alıyorum precondition failure: invalid input index: 2ve bu kadar, bu hatanın hangi dosya, dizi veya işlev hakkında daha fazla ayrıntı yok.

resim açıklamasını buraya girin

Xcode bu sorunu neden izole etmek için herhangi bir yolu var mı?


Konsolda ne görüntülenir? Görünüşe göre aralık dışında bir dizin var. Hedef görünüm denetleyicinizde olabilecek dizileri kontrol edin. Veya Sekme ile gittiğiniz ViewController öğesinin başlatıldığından ve tabController.viewControllers dizisinde başlatıldığından emin olun.
Alexander

Merhaba @Alexander, başlatma için, görünümlerimin doğru şekilde başlatıldığından eminim. Ve evet, aynı zamanda bir dizi sorunu olduğunu düşünüyorum, ama hangi dizi ve hangi sınıfta hangi dizi bilmiyorum, çünkü bu görünüm ve alt görünümleri dizilerle dolu. Bu yüzden düzgün bir şekilde nasıl hata ayıklayacağımı bilmek istiyorum. Şu anda, (bilmeden bile) bir düzeltme vurmak umuduyla, kodumu birçok şeyi değiştirmeye çalışıyorum.
gri

Bunu çok benzer bir durumda alıyorum. Benim için uygulama aynı hata ve hata ayıklama konsolu çıkışıyla kilitleniyor. Bir C ++ önkoşul hatası gibi görünüyor (yani Swift'in kendi içinde - dolayısıyla kesme noktası tarafından çalışmıyor). Benim için bir GeometryProxy boyutuna erişmeye çalışırken olur.
Daniel Thorpe

Burada aynı - GeometryProxy boyutuna erişmek, kopyalamak için@Binding
Grimxn

Bana olur. Yığındaki bir sonraki çağrı GeometryProxy.size.getter () olur, ancak benim için sadece SwiftUI sekmelerine belirli bir sırayla erişirsem olur. GeometryReader yalnızca kilitlenmeye neden olan sekmede kullanılır (Çökme yalnızca bu sekmeye üçüncü olarak erişilirse oluşur).
tarasis

Yanıtlar:


11

Bir Liste kullanılan bir görünüm içeren bir TabView vardı. Sekmeleri değiştirirken, uygulamam benzer bir hatayla kilitleniyordu: "önkoşul hatası: öznitelik bir başlangıç ​​değeri ayarlayamadı: 99" Bu kilitlendi:

var body: some View {
    TabView {
        ListView()
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

ListView bir NavigationView içinde sarma çökme düzeltildi. NavigationView'un bu kullanımını Caleb Wells'in "Swift Live - 007 SwiftUI TabView && List" bölümünde gördüm . https://youtu.be/v1A1H1cQowI

https://github.com/calebrwells/A-Swiftly-Tilting-Planet/tree/master/2019/Live%20Streams/TabView%20List

Bu işe yaradı:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

Formİçinde TabViewzaten aynı olan bir hata vardı NavigationView. Kazanın etrafında çalışmak için Formbaşka bir kukla sarmak ve NavigationViewekran dışında gizlemek zorunda kaldı .padding(.top, -60). Pal‍♂️
Palimondo

1
bu işe yarıyor, ama ideal değil. Navigasyon görüntüsü istemiyorum.
Imthath

Özel Görünümümde zaten NavigationView uygulamasında Liste vardı. Yaptığım şey, NavigationView'u Özel Görünümümden kaldırdım ve yukarıda belirttiğiniz gibi ekledim. Bu değişiklikten sonra kaza gitti.
Stefan Vasiljevic

@Palimondo Sanırım -100 ve -60 değil. düzeltmek için teşekkürler
PaFi

@Imthath sana katılıyorum
Çağatay

0

Ben de bununla karşılaştım. Birisinin yararlı bulması durumunda paylaşmak istiyorum.

KISA CEVAP

Benim görüşümü bir içine sarmak NavigationViewhatayı artıracaktır. Kullanarak .navigationViewStyle(StackNavigationViewStyle())sorunumu çözdüm.

UZUN CEVAP

Ben böyle bir şey vardı:

NavigationView {
    GeometryReader { proxy in
        VStack {
            Text("Dummy")
            Spacer()            
            MyView()    // CONTAINS HAS A GEOMETRY READER TOO
                .frame(width: min(proxy.size.width, proxy.size.height),
                       height: min(proxy.size.width, proxy.size.height)) 
            Spacer()
            Text("Dummy")
        }
    }
}

Ve sonra, içeride de MyViewvardı GeometryReader. Açıklandığı gibi kod başarısız olur. Eğer NavigationViewçıkarıldı, önkoşul yetmezliği olmazdı.

Kullandığım .navigationViewStyle(StackNavigationViewStyle())üzerinde NavigationViewve bu benim sorunu çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.