Film şeridi, kimliğine sahip bir görünüm denetleyicisi içermiyor


175

Aşağıdaki hatayı almaya devam ediyorum:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

Bu kod:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

Zaten ayarlamış identifierüzerinde UIStoryboardama hala bu hatayı alıyorum.

resim açıklamasını buraya girin



4
Görünüşe göre bir görünüm denetleyicisi değil bir segue tanımlayıcısı ayarladınız. Bu resimde hangi görünüm denetleyicisini sunmaya çalışıyorsunuz? Ve neden sadece segue kullanmıyorsun?
Firoze Lafeer

Sürüş görünümü denetleyicisi kadar iyi çalışır .... Ben TableViewController sunmaya çalıştığınızda daha hata alıyorum ...... nasıl yapardınız?
Mat

Storyboard'a gidin, bu Storyboard Kimliğini kaldırın ve tekrar ekleyin. Bazen derleme klasörünü ve türetilmiş verileri temizlemeniz gerekir
onmyway133

Yanıtlar:


244

Sadece ileride başvurmak üzere:

Storyboard'ları kullanarak iOS 6'da geliştiriyorum.

Aynı sorunu yaşıyordum, ancak denetçide "Tanıtıcı" alanını bulamadım. Bunun yerine, "Storyboard ID" adlı alanı Tanımlayıcı olarak adlandırdığınız alana ayarlamanız yeterlidir. Bu alan, denetçideki "Kimlik denetçisini göster" sekmesinde bulunabilir.

[Not - aşağıdaki yorumlar, bazı kişilerin müfettişte Storyboard kimliğinin hemen altındaki "Restorasyon Kimliği" alanını (ayrıca?) Ayarlamaları gerektiğini bulduklarını göstermektedir. "Storyboard ID Kullan" ı tıklamak yeterli görünmüyor.]

Aşağıdaki referans için bir görüntü var: (bu örnekte tanımlayıcımı sınıfımla aynı şekilde adlandırdım) resim açıklamasını buraya girin


24
pre XCode 4.4 ve öncesi: Tanımlayıcı; XCode 4.5: Storyboard Kimliği
ilmiacs

Bilgi için teşekkürler. Google'daki açıklamaları izleyerek storyboard'da tanımlayıcı bulmakta zorlandım, ancak Xcode4.6'da Tanımlayıcı bulamadım. Bu acemi için büyük bir sorundur. Teşekkürler.
Yeni başlayanlar

4
Benim için işe yarayan ReuseIndentifier'ı kullanmaktı. Film şeridi kimliği yine de boş bir işaretçi istisnasına neden oluyor.
Droid Chris

Aynı vaka burada @DroidChris
Ahmed

5
"Storyboard ID Kullan" ı kontrol et beni mutlu etti
preetam

189

Gelen Xcode 7-11 ,

film şeridi kimliklerini değiştirdiğinizde ve bunun gibi hatalar aldığınızda,

sadece projenizi TEMİZLEYİN ( CMD+ SHIFT+ K)


13
Bunu neden hep unutuyorum? En çılgın sorunları düzeltir. Bana hatırlattığın için teşekkürler Ted!
AlphaCodaSeven

2
Bu sorun, film şeridindeki bir VC'ye bir tanımlayıcı atandığı bir repodan çekilirken XCode 7.2'de meydana geldi. Projeyi temizlemek sorunu çözüyor gibiydi.
Ed George

2
Aklımı kaybettiğimi sanıyordum ... basit bir selam işe yaramadı, bu hile yaptı.
dokun1

2
Evet Çalışıyor !!!! xcode projesinin temizlenmesi projeye istenmeyen referansı kaldıracak
kiran

3
Android Studio ve Android geliştirmeden geliyorum. Bu, XCode ve Swift'te kaç tane hack kullanmam gerektiğidir. Gerçekten ağlamam lazım. Ciddi anlamda.
ktamas

43

Sabit! Benim durumumda DrivingDetails değil, sadece segue tanımlayıcı ayarlanması gerekir, aynı zamanda benim tableViewController tanımlayıcı DrivingDetails olarak ayarlanmalıdır ... resmimi kontrol edin:

resim açıklamasını buraya girin

Ayrıca navigasyon görünüm denetleyicisini de kaldırdım, böylece 2 tablo görünümü denetleyicisi doğrudan bir "itme" animasyonuna bağlı.

***** XCODE 7.0 için DÜZENLE *****

storyboardId öğesini ayarlamanız gerekir (bu durumda viewController bir Gezinti denetleyicisine gömülüdür:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

resim açıklamasını buraya girin


2
Bu soruya benzer bir sorunla karşılaşıyorum ama nitelikler müfettişine gittiğimde, ekranınızda sadece bir Başlık alanı, tanımlayıcı alan yok gibi 2 alan görmüyorum
Anon957

yukarıdaki cevaba baktın mı? Bence daha güncel. Teşekkürler
Mat

1
Segue tanımlayıcının bununla hiçbir ilgisi yoktur. Film şeridinde yalnızca görünüm denetleyicisi için Film şeridi kimliğinin ayarlanması gerekir.
Jawwad

Muhtemelen ilgili. İOS7'de [storyboard instantiateViewControllerWithIdentifier], görünüm denetleyicisinin içindeki Arayüz Oluşturucu'dan görünümler başlatılmıyor; ancak iOS6'da böyle yaptı
William Entriken

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

Not:

  • "StoryboardFileName"olan dosya adı Film Şeridi 've olmayan film şeridinin kimliği!
  • "StoryboardID"Eğer var kimliktir elle bu kare için kimlik denetçisinde ayarlanır (bakınız alttaki resim).

Film şeridi kimliği

Bazen insanlar birincisinin Storyboard Kimliği ve ikincisinin View Controller sınıf adı olduğuna inanırlar, bu yüzden farkı not edin.


1
Bu!! Adamım, 18 saatlik gizemi çözdün. Kısa açıklama için teşekkürler.
mrfevrier

1
Tanrım! Bunun için teşekkürler! veya daha basit bir şey .instantiateViewController(withIdentifier: "StoryboardID")olarak yeniden adlandırılmalıdır.instantiateStoryboard(withIdentifier: "StoryboardID")UIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt

16

Kimlik, Xcode 6.3.2 için Storyboard ID adlı Identity Inspector sekmesinde bulunur ve Storyboard ID Kullan seçeneğini işaretledi. resim açıklamasını buraya girin


Başından beri sorun vardı, bu sorun yaşadığım her iki yerde de çalıştı. Sadece Storyboard Kimliği değeri ayarlanmadı, 'Storyboard Kimliği Kullan' ı kontrol etmeniz gerekiyor
Tyler Hack

"Storyboard ID'yi kullan" benim için önemli bir parçaydı. Teşekkür ederim.
Marcy

9

Film şeridine yeni bir VC ekledikten sonra bu sorunu yaşadım, ancak simülatörde değil, yalnızca cihazda. Bunun birden fazla film şeridi yerelleştirmesi olduğu ortaya çıktı - VC yalnızca birincil olana eklendi. Diğer yerelleştirmeleri kaldırmayı denedim (biri iPhone'umun kullandığı) ancak yine de hata vardı. Sonunda, her birinde yeni VC ile diğer yerelleştirmeleri yeniden oluşturmak zorunda kaldım .


5

Derleyici aşağıdaki hatayı gösterir:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

Burada oluşturulan film şeridinin nesnesi, ViewControllers'larımızı içeren ana film şeridi değil. As film şeridi dosyası hangi biz iş olarak adlandırılır Main.storyboard . Bu yüzden Main.storyboard nesnesinin referansına ihtiyacımız var .

Bunun için aşağıdaki kodu kullanın:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

İşte storyboardWithNamebirlikte çalıştığımız film şeridi dosyasının adı ve film şeridimizin bundlebulunduğu paketi belirtir (yani mainBundle).


5

@Ravi Bhanushali ile aynı sorunu olanlar için, işte bir Swift 4 çözümü:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


Bu, @Ravi'nin cevabı hakkında bir yorum eklenmelidir.
Sunil

Ben olurdu ama itibarım yok. Yeterli bir üne sahip biri bunu yapmaktan daha hoş
confitz20

4

Onu buldum ... film şeridindeki görünüm denetleyicisine tıklayın, vc nitelik denetçilerinin solundan üçüncü simgeye tıklayın - 'kimlik' yazan o scereen'de çağrı adını ayarladığınız - benimki gizlendi, kimliğini tıklayın, sonra storyboardID'yi gösterir - koddan tanımlayıcı ekleyin, bitti


4

Kimlik denetçisinde (soldaki 3. simge) "Storyboard ID" yi değiştirmek çalışmalıdır.

Değilse ve yazım hatası olmadığından eminseniz, projeyi temizlemeyi deneyin ("Ürün" -> "Temizle" veya sadece + shift + K komutunu verin).


hayatımı kurtardı. Teşekkürler. (özellikle temizlik ile ilgili kısım)
Jay

1

Tanımlayıcıyı girerken uygun görünüm denetleyicisini seçmediyseniz, işlemi bir kez daha tekrarlayın.


hangi görünüm denetleyicisini seçmeliyim? Üzgünüm kafam karıştı.
Mat

TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier: @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex: indexPath.row] valueForKey: @ "ad"]; [self.navigationController pushViewController: animasyonlu denetleyici: YES]; bunun gibi?
Mat

Resme göre TableViewController u denetleyicide ayrıntıları görüntülemek için yapıyor gibi seçilmelidir.
11:18


1
Segue kimliğinizin ve görünüm denetleyicisi kimliğinizin farklı olduğuna dikkat edin. Ben sadece her ikisi için aynı adı kullandığınız için bazı karışıklık olduğunu vurgulamak istedim. Segue kimliğiniz, readyForSegue'te kullanılmalıdır ve görünüm denetleyicisi kimliğiniz, doğrudan storyboard'unuzdan görünüm yüklemek içindir. scott-sherwood.com/?p=219
Scott Sherwood

1

Görünüm denetleyicilerimden bazılarında storyboardIdentifier özniteliği eksikti .

Önce:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

Sonra:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

Aynı hatayı aldım ve projemde aşağıdaki değişiklikleri değiştirerek bunu düzeltebilirim. Müfettiş panelinde sınıf ismimden bahsettim, sonra sorun çözüldü. Goto-> sağ panel var Kimlik Denetçisi Özel sınıf bölümünde

sınıf: sınıf adınız (ViewController)

Kimlik bölümü film şeridi kimliğinde: film şeridi kimliğiniz (viewController Name)

Bundan sonra Orada film şeridi kimliğini kullan seçeneğini tıklayın.Sorun bitti. Umarım bu sana yardımcı olur....


0

Tanımlayıcıyı (@ "drivingDetails") Storyboard Kimliği olarak kullanın.


0

ana hikaye panosunda ilgili görünüm denetleyicisini seçin ve mevcut bir ad vermek kimliğinde kullanması durumunda storyboardID'yi kontrol etmek çok basittir.

burada benim firstone hikaye tahtasıID izin vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") olarak! tabBarViewController


0

Yukarıdaki çözümlerin hepsini denedim ve hiçbiri işe yaramadı.

Yaptığım şey:

  • Proje temizliği
  • Türetilmiş verileri sil
  • Xcode'u yeniden başlat
  • Önceki yanıtlarda gösterilen Öykü Tablosu Kimliği'ni (IB içinde) yeniden girin.

Ve sonra işe yaradı. Şaşırtıcı olan şey, arayüz oluşturucusunda Storyboar kimliğine girmiştim ve Xcode'u tekrar açtıktan sonra kaldırılmış / silinmiş olmasıydı.

Umarım bu birine yardımcı olur.


0

Her şeyi temizlemek ve Xcode'u kapatmak benim için sorunu çözmedi.

ViewController silmek ve yeni tanımlayıcı ile yeni bir tane oluşturmak zorunda kaldı.


0

Not: Projenizde cocoapods kullanıyorsanız, önce çalıştırın pod deintegrateverm Podfile.lock

Ardından proje klasörünüzü VSCode gibi herhangi bir üçüncü taraf kod düzenleyicisinde açın ve hatayı atarak ViewController adını genel olarak arayın.

  1. Bulduğunuz yanlış adları yeniden adlandırın / düzeltin.
  2. Tüm değişiklikleri kaydedin.
  3. Projenizi temizleyin ve oluşturun.

Şimdi her şey iyi olmalı.

Bu genellikle Xcode içinden dosyaları yeniden adlandırdığınızda oluşur.


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.