Xcode: "Giriş noktalarının olmaması nedeniyle sahneye erişilemiyor" ancak bulamıyorum


89

Xcode 4.5.2 bana şu uyarıyı veriyor:

Unsupported Configuration    
Scene is unreachable due to lack of entry points and does not have an identifier 
for runtime access via -instantiateViewControllerWithIdentifier:.

Maalesef suçlanan sahneyi tanımlayamıyorum. Sorun Gezgini'nde uyarının seçilmesi, Film Şeridi'ndeki hiçbir şeyi vurgulamaz. Oldukça karmaşık bir film şeridim var (30'dan fazla sahne).

Herhangi bir öneri?

Uyarı için ekran görüntüsü

Yanıtlar:


50

Bu konu eski olsa da, benim için neyin işe yaradığını açıklayan bir cevap görmedim, işte burada ...

Bu hatayı yaşadım ve film şeridinin görsel incelemesi, tüm görünüm denetleyicilerinin kök görünüm denetleyicisine bağlı göründüğünü gösterdi.

Film şeridindeki 17 görünüm denetleyicisinin tümünü adlandırmayı denedim (@ bobnoble'ın cevabında olduğu gibi). Görünüm denetleyicisinin uzun adına dayalı bir adlandırma kuralı kullandım, örneğin "İşler Görüntüleme Denetleyicisi" için "jvc". Oluşturmaya çalıştığımda, görünüm denetleyicilerinden birinin yinelenen bir ada sahip olduğunu gösteren bir hata mesajı aldım. Bir şeyleri takip ederken, tam olarak ikizinin üstüne yığılmış bir görünüm denetleyicisinin gerçek bir kopyasına sahip olduğumu buldum . Tamamen geri çekmediğim bir kullanıcı arayüzü deneyinden kesip yapıştırma hasarı olduğundan şüpheleniyorum.

Her neyse, bağlantısız ikizi silmek sorunumu çözdü. Bundan sonra, kodda başvurulmadıkları için tüm VC adlarını kaldırdım.


3
Bu benim de başıma geldi, ama yine de birçok boştan birini doldurmam gerekiyorduStoryboard ID
Pierre de LESPINAY

... o zaman @bobnoble'ın bir √ ile işaretlenecek doğru yanıt olduğuna inanıyorum
SwiftArchitect

139

Film şeridinizde, her bir görünüm denetleyicisini seçin (aşağıdaki resimde kırmızı ok) ve Storyboard Kimliği alanına (kırmızı oval) bakın. Storyboard ID alanlarının hiçbiri boş olmamalıdır. Birini bulduğunuzda, suçlu budur.

görüntü açıklamasını buraya girin


6
Merhaba @bobnoble, cevabınız için teşekkürler. Bir soru: Neden her sahne için Storyboard Kimliği belirlemeliyim? Bunun zorunlu olduğunu sanmıyorum, değil mi? Sahneye programlı olarak erişmek istiyorsam bir kimlik belirlemem gerektiğini biliyorum, ancak ya tüm sahnelerim bölümler aracılığıyla bağlantılıysa? Yoksa sadece iyi bir programlama uygulaması mı?
Wolfy

@Wolfy - iyi bir nokta, bir segment veya Storyboard ID'ye sahip olduğundan emin olmak için her birine bakmanız gerekir.
bobnoble

2
Bu çözümü Storyboard ID
denerken

Ben UINavigationControllerbirkaç için UIViewControllersbile tanımlayıcı bunlardan birini hiç aramıyorsun, ve hepsi bir tanımlayıcı ayarlamak zorunda kaldı. Gerçekten can sıkıcı, kimsenin olmadığı bir böcek aramak!
Alex Cio

Benim için çalışıyor. Bunun neden ortaya çıktığını bilen var mı? Çok keşfedilemez görünüyor - geriye dönüp bakıldığında verilen hata yetersiz bir ipucu veriyor. Bir storyboard'u en son ve en büyüğüne dönüştürdükten sonra aldım - şimdi Storyboard ID gerekiyorsa, kesinlikle daha önce değildi ve otomatik dönüştürme bununla ilgilenmedi.
Josh Sutterfield

30

Basit bir tek sahneli Storyboard'da tam olarak bu hatayı aldım ve bunu düzeltmek için tek yapmam gereken, Storyboard'daki 1 View Controller için "Is Initial View Controller" onay kutusunu işaretlemekti. Xcode'un bu durumda sizin için varsayılan olarak bu kutuyu işaretlediğinden şüpheleniyorum, ancak artık yok.

Alttaki kutuyu işaretleyin

                                     

Film şeridinizdeki görünüm denetleyicilerinden tam olarak birinin kutusunu işaretleyin ve iyi olmalısınız.


1
Teşekkürler. İşte buydu!
Eric Chen

20

Korkarım bunların 30'unu da gözden geçirmeniz ve bir Storyboard ID veya bu görünüm denetleyicisine bir segment olup olmadığını kontrol etmeniz gerekecek. İkisinden biri gereklidir, her ikisi de bir seçenektir.


5
Tüm görünüm denetleyicilerinin segmenti veya kimliği olduktan sonra, hata mesajı hala orada olabilir. Bu durumda ürünü temizleyin ve gitmiş olacaktır.
Reinhard Männer

5
Benim durumumda temiz bir ürün, hatayı düzelttikten sonra hata mesajından kurtulmak için yeterli değildi. Xcode'u yeniden başlattığımda kayboldu. (Projeyi kapatmayı / yeniden açmayı denemedim. Bu da işe yaramış olabilir.)
JulianSymes

Benim için aynı - sonunda hata mesajından kurtulmak için xcode'u durdurup yeniden başlatmanız gerekir.
MusiGenesis

8

Bu sorun aşağıdaki senaryolardan birinde gerçekleşebilir:

Durum I: Film şeridindeki sahnelerin hiçbiri "isInitialViewController" olarak işaretlenmemişse .

Düzeltme: Kök görünüm denetleyicisini tanımlayın ve SB'nizde "isInitialViewController" olarak işaretleyin . Bu durumda film şeridi kimliği zorunlu değildir.

Durum II

Bir storyboard'da initialViewController'a sahip olmanız gerekmeyen durumlar olabilir. Örneğin: Birden çok film şeridi kullanırken.

Düzeltme: Bu gibi durumlarda "film şeridi kimliğinin" doğru şekilde verildiğinden emin olun ve bu kimliği kullanarak film şeridinde kullanılan ilk sahneye bakın. Örneğin:

UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil];
MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];

Bu durumda "film şeridi kimliği" zorunludur.

Durum III

İlkViewController'ınız bağlandı. Ama yine de bu uyarıyı alıyorsunuz. Bunun nedeni, film şeridindeki bazı sahnelerin bir "bölüm" ile bağlantılı olmaması ve ayrıca bir "film şeridi kimliği" olmamasıdır . Film şeridinizi tarayın, bir "segment" gerekip gerekmediğine bakın. Eksikse segmenti bağlayın. Bir bölüm gerekmiyorsa , yukarıdaki örnek kodda gösterildiği gibi sahneye kodunuzdan başvurmanın tek yolu bu olduğundan "film şeridi kimliği" vermeniz gerektiğinden emin olun .

Bu yardımcı olur umarım


VAKA III - bana yardım etti. Teşekkürler!
mrGott

Eski xib dosyasıyla örnek bir Projenin geldiği bir vakam vardı. Bir storyBoard oluşturdum ve şu anda acı çekiyorum .. xib'i storyBoard formatına dönüştürmem ve oradan hareket etmem gerekiyor .. bir uygulama sahnesi veya menü oluşturmanın herhangi bir yolunu göremiyorum ..
nyxee

6

Storyboard IDTüm sahneler için ayarlamanıza gerek yok veyaUINavigationController

Yaklaşık 50-60 sahnem var ve bu uyarıları yeni aldım, böylece yalnızca segment ile bağlantılı olmayan denetleyicinin (Sahne) veya Navigasyon Denetleyicisinin ayarlanması gerektiğini fark ettim Storyboard ID.

görüntü açıklamasını buraya girin

Yukarıdaki UINavigationControllergörselde segment ile bağlantılı olmadığını görebilirsiniz , bu uyarının suçlusuydu.

Bu uyarıyı kaldırmak için sadece bir Storyboard Kimliği verin.


5

Ben de aynı sorunu yaşadım. Bir gezinme ve sekme çubuğu denetleyicisiyle film şeridimde çok sayıda görüntü var. Benim için bu, bazı görüşlerin bağlantılı olmadığını size bildirmek için bir uyarı oldu. Tüm görünümlerinizin bir şekilde kök görünüm denetleyicisine bağlı olduğundan emin olun . Bu uyarıyı ortadan kaldırmak için bu projeye sıfırdan başlıyordum ve bir görünüm bağlanmadığında aynı uyarıyı fark ettim.


Bu bana yardımcı oldu. 7.1.1 Swift 2'yi aşıyorum kullanıyorum. İlk StoryBoard, kök görünüm denetleyicisi OLMALIDIR.
Lukesivi

3

Rahatsız edici sahneyi bulmanın en basit yolu:

Sorun gezginine gidin (sol panelde, ara düğmesinin yanında) ve hatayı çift tıklayın. Soruna neden olan sahneyi pencerenin ortasında ortalanmış olarak içeren bir pencere açılır.

(Bu aslında genel olarak doğrudur - herhangi bir hatayı çift tıklamak, genellikle hatanın ortalanmış olduğu bir açılır pencere ile sonuçlanır - küçük, temiz bir numara!)

Yan not: Bazen, XCode, bir gezinme denetleyicisinin kök görünüm denetleyicisi olan bir sahne için (bu, ilk görünüm denetleyicisidir) bu hatayı yanlışlıkla verir. Basit bir düzeltme, bu kök görünüm denetleyicisine bir Storyboard Kimliği vermek, derleme (hata ortadan kalkmalı) ve ardından storyboardID'yi (artık hata yok) kaldırmaktır.


İpucunuz için teşekkürler "Basit düzeltme, bu kök görünüm denetleyicisine bir Storyboard Kimliği veriyor". Sorunumu çözdü. UINavigationController'a 'Storyboard ID' vermem gerekiyor.
Mohd Haider

Bu beni Ana Menü ile Uygulama Sahnesine işaret ediyor. Buna Storyboard Kimliği veremezsiniz.
Daniel

2

Hangi denetleyicinin veya sahnenin bu soruna neden olduğunu görmenin en kolay yolu şudur:

  • .storyboardProje Gezgini'nde Ctrl tuşunu basılı tutarak tıklayın ve öğesini seçin Open As > Source Code. Bu, Storyboard'un temelindeki XML'i getirecektir.
  • Bu görünümde, uyarı, rahatsız edici sahne ile ilgili XML'deki bir satırla açıkça ilişkilendirilecektir.

Şimdi, benim durumumda, uyarı özellikle can sıkıcıydı çünkü "rahatsız edici sahne" bir tanımlayıcıya ve bir segmente sahipti! Sahneyi silerek ve ardından silme işlemini geri alarak sorunu çözebildim. Zarif değil ama işe yaradı. Bunu yapmadan önce Storyboard'umu kaydettim. Geriye dönüp baktığımda, bir kopya diffyapıp öncesini-sonrasını yapmalıydım .


2
Garip bir şekilde, bu tutarlı bir şekilde çalışmıyor gibi görünüyor. Benim bozuk durumumda işe yaradı. Şimdi test ediyorum ve Source Codegörünüm hatayı göstermiyor. Yani kilometre değişebilir.
Dmitry Minkovsky

View Controller'ı bununla bulamadım, ancak onu sildim (XML'de, ID'de çalışmadı) ve uyarı gitti.
Daniel

2

Benim için a Storyboard IDveya a yüzünden değildi Segue. Bu uyarıyı alıyordum çünkü View Controller's Custom Class.

Seç View Controllerüzerine Storyboardardından, Utilities Paneseçmek Identity Inspectorsimgesini. Alanın altında Custom Classhangi değerin olduğunu görün Class.

Sadece UIViewControlleryazıyorsa, sınıf adını yazmanız gerekir. Bu, sizin .hve .mözel UIViewControlleralt sınıfınızı oluşturan dosyaların adı olacaktır .


Bunda biraz değişiklik yaşadım. Film şeridimdeki yanlış ViewController'ı ViewController sınıfıyla eşleştirdim ve aynısı Storyboard Kimliği ile.
Vince O'Sullivan

2

Bugün bu soruya geldim. Xcode 6.3 kullanıyorum ve OP'nin sorusunun cevabı şimdi oldukça basit:

İlki olmasını istediğiniz Görünüm Denetleyicisini seçin, Öznitelik Denetleyicisini gösterin ve Denetleyiciyi Görüntüle bölümünün altında,

İlk Görünüm Denetleyicisidir

kontrol edilir. Voilà!


2

Xcode 7 ile bu kolaylıkla halledilebilir. Sorunlu bir sahne bulmak için tüm sahneleri manuel olarak gözden geçirmeye gerek yoktur. Önce , bilinen sorunlar hakkında daha ayrıntılı bilgi alabileceğiniz Rapor gezginine gidin . Sorun açıklaması şöyle görünebilir:

Base.lproj / Main.storyboard: fPh-fe-F5F : uyarı: Sahneye giriş noktalarının eksikliğinden dolayı erişilemiyor ve -instantiateViewControllerWithIdentifier: üzerinden çalışma zamanı erişimi için bir tanımlayıcıya sahip değil.

Bu bilgi ile nesne kimliğini kopyalayabilirsiniz, bu durumda fPh-fe-F5F idi ve bu dizenin oluşumu için çalışma alanında arama yapabilirsiniz. Dize, Main.storyboard dosyasında bulunacaktır. Arama sonucuna çift tıklayın ve seçilen sahne ile Main.storyboard açılacaktır. Sorunlu bir sahneyi öğrendikten sonra, film şeridi kimliğini ayarlayarak veya "İlk Görünüm Denetleyicisidir" ayarını yaparak sorunu kolayca çözebilirsiniz.


1

Sadece bir tanımlayıcı ayarlayabilirsiniz. Sağ bölmedeki öznitelik denetçisinde "Tanımlayıcı" adlı bir alan bulacaksınız. Sadece oraya herhangi bir ip koyun, bu çalışmalı

Gezinme denetleyicisine tıklayabilir ve öznitelik denetçisinin altında "ilk görünüm denetleyicisidir" düğmesini tıklayabilirsiniz ve bu da çalışmalıdır.


1
Mohammad, yanıtladığın için teşekkürler ama sorun şu: Hangi sahneye bir tanımlayıcı koymalıyım? Uyarıya neden olan sahneyi bulamıyorum, asıl sorun bu.
Wolfy

1

aynı problemle karşılaştım ve tüm viewController ve NavigationController için herhangi bir tanımlayıcıyı storyboard ID'ye koyarak çözdüm; hata hemen kaldırılacaktır

zevk almak!!!


0

Belki bu XQuery o iğrenç sahneleri bulmanıza yardımcı olur

for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id      (: find every scene that has an empty storyboardIdentifier :)
where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController             (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) 
return ($i, $i/../@customClass)                                                                   (: return the storyboard-id and the customClass, if any :)

Xqilla yüklüyse, sorguyu bir dosyaya kaydeder ve şu şekilde kullanırsınız:

xqilla <xqueryfile> -i <path to your storyboard>

0

Bundan henüz bahsedilip bahsedilmediğini bilmiyorum ama bu uyarıyı almanızın bir başka nedeni de yanlış yöne giden bir segmentinizin olması. Örneğin, projemde bu uyarıyı alıyordum ama aslında tüm denetleyicilerim birbirine bağlıydı. Bununla birlikte, bir tanesi temelde çocuğu sunan ebeveyn yerine ebeveyni çocuktan sunmaya çalışan bir segmente sahipti. Bu aynı uyarıya neden oldu.


0

Storyboard'da hiçbir şeyin ayarlanmadığı bir UIViewController'a sahip olduğumda bu uyarıyı aldım. Storyboard ID'yi ayarlayarak bu uyarıyı önledim.


0

Aynı sorunu yaşadım, ancak konteyner görünümünü kullandığımı fark ettim ve varsayılan görünüm denetleyicisini silmek yerine segmentini sildim, bu yüzden görünüm denetleyicisi storyboard'da kaldı ve uyarı da öyleydi. Dolayısıyla bu, konteyner görünümünün varsayılan görünüm denetleyicisine ihtiyacınız olmadığında düzgün şekilde silinmezse uyarının açıldığı durumlardan biridir.


0

Yukarıda açıklanan her şeyi boşuna denedim. Her şey IB'ye doğru bir şekilde bağlanmış ve tam olarak bir tanesi UIViewControllerkök görünüm denetleyicisi olarak belirlenmişti. Tanımlayıcım yoktu ama onları tüm denetleyicilerime ekledim.

Kaybolma uyarısını alabilmemin tek yolu, yukarıdaki her şeyi yapmak (bilgisayar yeniden başlatma ve temiz bir yapı dahil), sonra git ve tekrar projemin hatasız bir dalına geçmekti.

Hangi eylemin onu veya hangi eylem kombinasyonunu düzelttiğinden emin değilim, ancak tek başına temiz bir yapı değildi. Bu, Main.storyboard'un her zaman basitçe açıldığında değişen bir yan ürünü olabilir, bu da git commit -m "Stupid storyboard"istediğimden daha sık yapmam gerektiği anlamına gelir .


0

İşte benim için işe yarayan şey:

  1. Film şeridini bir metin düzenleyicide açın.
  2. 3.0 sürümünden 2.0 sürümüne değiştirin kaydedin ve kapatın.
  3. Visual Studio'da tekrar açın. Belgeyi otomatik olarak dönüştürür ve açar.

0

Aynı hatayı aldım: Benim için hata, hikaye tahtamda bir görünüm denetleyicisi başlatmadım.

Bunu düzeltmek bu uyarıyı kaldırdı.


0

Basitçe tüm MVC'lere bir storyboard kimliği vermek benim için çalıştı.

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.