Xcode 4: UIView xib oluşturma, düzgün bağlanmama


84

TableViewCell'e gömülecek bir görünüm içeren bir uç oluşturmaya çalışıyorum. Arayüzü ve uygulama dosyalarını oluşturdum ResultCell.hve ResultCell.m. Stoklar, kullanıma hazır, kod değişikliği yok.

Daha sonra boş bir XIB dosyası oluşturuyorum ve üzerine bir UIView sürükledim. Sonra File's Owner'a tıklıyorum ve türü olarak ayarlıyorum ResultCell. Görünümü tıklıyorum ve sınıfını da olacak şekilde ayarlıyorum ResultCell.

İşte sahip olduğum sorunlar:

  1. Yardımcı Düzenleyici görünümünü (içinde yaşadığım) ResultCell.hkullanırken, ResultCell.xib dosyasını görüntülerken dosya görünmüyor. Otomatik'i tıklayıp dosyayı seçerek yüklemeye zorlamam gerekiyor.
  2. Görünüme bir etiket bırakıp ardından Ctrl + Tıkla ve bir çıkış oluşturmak için .h öğesine sürüklediğimde şu hata mesajını alıyorum: " Yeni çıkış bağlantısı eklenemedi: ResultCell adlı sınıf hakkında herhangi bir bilgi bulunamadı. "

Görünümü oluşturmayı ve yeniden oluşturmayı denedim ve bu işe yaramıyor ve sabrımı kaybetmeye başladım. Herhangi bir yardım çok çok takdir edilecektir!


Bununla kendim karşılaştım. Dün gece işe yaradı ve bugün hiçbir şey olmadı. Bir şey bulursam sana haber veririm.
Tavison

Kayıt için, geçen yıl buradaki birçok cevap bana yardımcı oldu. Xcode'un son sürümleri bazı şeyleri iyileştirdi.
Tim Sullivan

Yanıtlar:


82

Bu, özel sorununuz için işe yaramayabilir, ancak bazen yeni oluşturulan uçlarla çalışırken bu hatayı alıyorum. Uçları ve Görünüm Denetleyicilerini eskisi gibi aynı adlarla silmek ve yeniden oluşturmak sorunu çözmedi, ancak Xcode'u yeniden başlatmak sorunu çözdü.


+1 Benim için de çalıştı. Sadece XCode'u yeniden başlatın ve şimdi .h dosyamda yeni @ mülkler oluşturmak için CTRL + Sürükle yapabilirim.
Mike Gledhill

1
David Pisoni cevabı benim için çalıştı. Sadece Xcode'u yeniden başlatmak hardalı kesmedi.
Andy

Şu anda birçok Xcode sürümünde bu sorunu yaşamadım, bu yüzden muhtemelen şu anda bu cevabı yazdığımdan daha yaygın olan başka bir neden var.
defragged

@Defragged, alıntı yapmadan önce Komut K'ye basarak önbelleği temizleme adımını da ekleyebilir misiniz, daha da iyisi ~/Library/Developer/Xcode/DerivedData
Xcode'dan çıkıp

Xamarin Studio ile çalışıyorum. Xcode ve xamarin stüdyosundan çıkmam ve ardından Xamamrin Studio'yu yeniden açmam ve buradan xcode'da başlatılan bir xib dosyasını açmam gerekti. Yardımcı editör daha sonra doğru bir şekilde açıldı.
Dave Haigh

113

Daha bugün benzer bir duruma girdim. Çok tuhaftı: Herhangi bir XIB'yi (yeni veya mevcut) projede zaten var olan herhangi bir ViewController sınıfına ekleyebildim, ancak yeni bir ViewController oluşturamadım ve herhangi bir XIB'ye düzgün bir şekilde bağlanmasını sağlayamadım. "Asistan" işlevi veya IB'den başlık dosyasına bağlantı işlevi çalışmadı.

Projeyi kapatmak ve yeniden açmak sorunu çözmedi.
XCode'dan çıkmak ve yeniden başlatmak sorunu çözmedi.
Yeni bir proje oluşturmak ve işlevselliği test etmek iyi çalıştı, bu da beni bir yerlerde bazı önbellekte bozuk bir şey olduğuna inanmaya yöneltti.

Çözümüm

  • Projenizi kapatın.
  • ~ / Library / Developer / XCode / DerivedData klasörüne gidin ve üzerinde çalıştığınız projeye atıfta bulunan tüm alt klasörleri KALDIRIN.
  • Projenizi XCode'da açın. Sorun şimdi çözülmelidir.

Bu arada, sadece tam bir temizlik yapmak, işleri netleştirmedi. Elde edilen verileri çöpe atmak zorunda kaldım. Oynadığım git oyunları yüzünden bu pozisyona girdiğime eminim, ama nasıl çıkacağımı bilmiyordum, çünkü daha önceki Git revizyonlarına geri dönmek bile yardımcı olmadı. (Bu aynı zamanda projenin kendisi tarafından izlenmeyen bir şey olduğuna dair büyük bir ipucuydu.)


6
Mac'imde SO'da oturum açtım, sırf bu yanıtı yükseltebilmek için! Tamamen benim için çalıştı. Bu beni çıldırtıyordu, çünkü XCode'u kullanmayı öğreniyorum ve bu tür saçma problemler olmadan zaten yeterince zor. :) Teşekkür ederim!!!
Dave

2
xcode'u yeniden başlatmadan bile çalışır; sadece türetilmiş verileri silme ve yeniden oluşturma (bir iOS projesinde)
nob

Bu, xcode yeniden başlatıldığında işe yaramadı. David Pisoni'nin yöntemiyle nasıl olduğu hakkında hiçbir fikrim yok harika çalıştı.
mmopy

Harika. Bunu nasıl bildin? Benim için çalıştı.
hol

1
lol, IOS ve
xcode'un

14

Bu sorunu yeni yaşadım ve Xcode'u yeniden başlatmak sorunu çözmedi. Sınıf dosyalarını projeden kaldırdım, sonra tekrar ekledim ve çalışmaya başladı.


13

Ben de aynı sorunu yaşadım. Ve denedim:

  • Xcode'u Yeniden Başlatma
  • Türetilmiş Verileri Silme
  • Ve daha fazlası

Bunların hiçbiri işe yaramadı. Benim için işe yarayan basitçe şuydu:

  • 'Şüpheli' sınıf dosyalarını Project'ten kaldırın (sadece Referansları kaldırın, ha?)
  • Onları projeye yeniden ekleyin

Ve bitti!


2
Bu benim için çalıştı, teşekkürler! XCode'u yeniden başlatmak dışında denediğim ilk şey buydu, çünkü en az iş ve risk gibi görünüyordu ve harika çalıştı.
adriandz

1
xcode'u yeniden başlattıktan ve türetilen verileri sildikten sonra benim için çalıştı
elad s

1
Bu da benim için hile yaptı. Bunun sınıf adlarının yeniden düzenlenmesiyle bir ilgisi olabilir (daha önce yaptığım şey buydu).
ecotax

9

Xcode'u yeniden başlatmak sizin için işe yaramazsa, yeni .m dosyasını çıkarıp hedef üyeliğe geri döndürmenin işe yaradığını buldum.


3

Bu bana yardımcı oldu:

  1. Panel proje dosyasından (sol taraf) kırılan xib dosyasını seçin.
  2. Düzenleyici görünümünden Dosya Sahibi simgesine tıklayın.
  3. Özellikler Panelinden (sağ taraf) üçüncü sekmeyi seçin (üstte)
  4. "Özel Sınıfı" belirtin

Bir "panel" görmüyorsanız, lütfen pencerenin sağ üst köşesine bakın ve uygun "görünüm" düğmelerini etkinleştirin. "Görüntüle" düğmelerini görmüyorsanız, en sağ üstteki kapsül düğmesini tıklayın.


Son zamanlarda sınıf adını değiştirdim (refactor). Bu cevapta belirtildiği gibi özel sınıf hala eski isme ayarlanmıştı. Yeni adla değiştirildi ve düzeltildi.
PaulMrG

2

.M dosyasının en.lproj klasörüne taşındığını fark ettim.

Sadece .m dosyasını Xcode'dan silin (yalnızca referans) ve .m dosyasını en.lproj'den çıkarın. Tekrar ekleyin, sorunu çözecektir.

Merak etmeyin, tüm bağlantılarınızı geri alacaksınız.


.M dosyam otomatik oluşturuldu ve henüz değiştirmedim. Yaptım ve her şey yolundaydı. Başka hiçbir şey işe yaramamıştı.
entonio

2

Bugün aynı problemle karşılaştım. XCode'u yeniden başlatmak sorunu benim için çözmedi. Organizatör altında bulunan projenin "Türetilmiş Veriler" in "Sil" seçeneğini kullanarak işleri normale döndürmeyi başardım . Organizatör, "Türetilmiş Veriler dizini, derleme çıktısını ve günlükleri içerir" der. Sanırım indeks veya derleme çıktısı bu soruna neden oluyordu.


2

XCode'da organizatöre gidin, projeye tıklayın, türetilmiş verileri sil'e tıklayın ... projeyi temizlemek yerine


2

Benim durumumda, ilgili başlık dosyasına "sahte değişiklik" (sadece boşluk) yapılmasına yardımcı oldu.


Sanırım bu benim için de yapmış olabilir. Benim durumumda manuel olarak bir priz ekledim. Daha sonra eriştelerimi ona bağlayabildim ve ctrl-sürükleyerek yeni çıkışlar oluşturabildim.
Daniel Ahşap

1
  1. ResultCell bir alt sınıf olmalıdır UITableViewCell
  2. A'yı UIViewboş tuvale sürüklememelisiniz,UITableViewCell
  3. Sen seçmelisiniz hücreyi ve değiştirmek o senin alt sınıf olmak
  4. Sahibi çoğunlukla hücreye çıkışı olan bir denetleyicidir

Her yeni hücre yüklemek istediğinizde şu numarayı arayın:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

yükledikten sonra hücreyi kullanın ve ivar / prizi sıfır olarak ayarlayın, bir sonraki yükleme için hazır

başka yollar da var ama bu yaygın


Bunu yaparsam, tamamen aynı problemi yaşarım. Yardımcı Düzenleyici, ucu görüntülerken .h'yi görüntülemez ve ctrl + sürükleme, çıkış kodunu oluşturmaz, hatayı görüntüler.
Tim Sullivan

2
4.0.2 Xcode kullanıyor musunuz? Yanlış davranıyorsa, yardımcı düzenleyiciyi manuel olarak ayarlayabilirsiniz. Bu sorunu yeniden test etmek için uygulamayı yeniden başlattığınızı varsayıyorum (Xcode 4 genellikle bundan yararlanır). Projede sınıf dosyalarını bulamıyor gibi görünüyor veya yanlış isim verilmiş - büyük harf kullanımı önemli. Proje şu anda inşa ediliyor mu? Bu, yeni derleyici teknolojisine bağlı olan çok yüksek düzeyde bir işlevselliktir.
bshirley

Oh, afedersin. Evet, Xcode yeniden başlatılıyor ve hemen çalışmaya başladı. Affedersiniz, şimdi kılıcıma düşeceğim.
Tim Sullivan

1

Belki benim için işe yarayan şey budur .. (Xcode v4.5)

Bu işe yaramadı

.H dosyamın arayüz tanımına sürüklemeyi kontrol etmeye çalışıyordum

@interface SearchViewController : UIViewController

@end

Bu işe yaradı (belki de böyle çalışması gerekiyordu, daha önce bilmiyordum) Açma ve kapama parantezlerine bakın. Kapalı parantezin ardından sürükle ve bırak işlemini kontrol edin.

@interface SearchViewController : UIViewController
{
}

@end

1

Swift ile yazılmış bir projeyle benzer bir sorun yaşadım.

Benim için işe yarayan şey, IBOutlet'i böyle bir kodda kurmaktı

@IBOutlet var foo: UIView?

ve daha sonra, kod satırının hemen yanında görünen küçük daireye sürükleyerek Arayüz Oluşturucuya bağlayın.


Benim için de çalışmasını sağlamanın YALNIZCA yolu buydu. Objective-C (iOS Uygulamalarını Geliştirmeye Bugün Başlayın) için yazılmış bir Apple eğitimini takip ediyordum ve Yeni Yapılacak Öğesi metin alanını bağlamam gerekiyordu. Sonunda @IBOutlet var textField'ı yarattım: UITextField? ve buna bağlı ve işe yaradı. XCode 6.4 Kullanımı
andrewz

1

Yukarıdaki geçici çözümlerden hiçbiri benim için bağlayıcı sorununu çözmedi, bu nedenle aşağıdaki yığın akışı iş parçacığıyla karşılaşana kadar evcil hayvan projemi rafa kaldırdım:

https://stackoverflow.com/a/15873770/2846800

XCode'un önceki bir sürümünde büyük bir proje üzerinde çalışıyordum ve indekslemeyi kapatmıştım. Endekslemeyi yeniden etkinleştirerek sorunum şimdi düzeltildi:

defaults delete com.apple.dt.XCode IDEIndexDisable

Artık Interface Builder'ın D&D özelliklerini kullanabilirim. Umarım bu başkalarına yardımcı olabilir ...


1

Bu sorun, çoğunlukla bir dosyayı aynı adlı yeni bir dosyayla değiştirdiğinizde ortaya çıkan bir Xcode hatası gibi görünüyor. Xcode, aynı adlı eski dosyanın referansını saklıyor gibi görünüyor.

Her neyse, bunu düzeltmenin yolu şöyle görünüyor:

  1. Projeyi temizleyin
  2. Proje Gezgini görünümünde (Projeniz] 'e tıklayın. Oluşturmakta olduğunuz hedefin Derleme Aşamaları altında Kaynakları Derleme'ye gidin. Sorun çıkaran .m dosyasını kaldırın ve geri ekleyin.
  3. Alternatif olarak, NIB dosyasının Dosya Denetçisinde (Yardımcı Programlar görünümü), Hedef Üyelik altında, hedef adının işaretini kaldırın ve yeniden kontrol edin.
  4. İyi bir önlem için Xcode'u yeniden başlatın.
  5. Elbette, .m dosyasını tek başına silip geri eklemek de sorunu çözmelidir.

(Adım 1 ve 2 tek başına benim için düzeltti.)


0

Başka bir projeden dosya kopyaladıysanız, 'Hedeflere ekle' kutusunu işaretlediğinizden emin olun.



0

Benzer semptom, ancak farklı neden.

Görünüşe göre, odak asistan görünümündeyken geri tuşuna bastım, çünkü standart dosya şablonu yorum satırlarından biri // 'den /' e gitti ve bu da dosyanın derlenmemesiyle sonuçlandı.

Yorumun düzeltilmesi, SDK'nın dosyayı ayrıştırmasına, onu bir UIViewController olarak tanımasına ve çıkışa eklemesine izin verdi.

SO - bu sorunu yaşıyorsanız, görünüm denetleyicisi .h dosyanızda düzeltilmesi gereken hatalar olup olmadığını görmek için bir derleme veya analiz yapın. SONRA diğer çözümleri deneyin.


0

Bu eski bir konu olabilir, ancak gelecekte aynı sorunu yaşayan biri olması durumunda, ilişkili .xib, .h ve .m dosyalarını silmeyi deneyin ve yenilerini oluşturun. Benim için .h dosyamdaki UIViewController mor değildi ve hatta geri almak ve yazmak bile işe yaramadı.


0

@ Uygulama ile @ sentezleme arasına bir çizgi koyun. Buradaki cevapların çoğunun ortak noktası var. Benim için çalıştı

@implementation 

@synthesize

0

Burada her şeyi denedim ve hiçbir şey işe yaramadı (Xcode 5 için Geliştirici Önizlemesi kullanarak).

Benim için işe yarayan tek şey, bu eksik satırı arayüz dosyama koymaktı:

@property (nonatomic, weak)

Sebep ne olursa olsun, .xib'den sürükleyip bırakarak çıkışlar ve eylemler eklemek bundan sonra iyi çalıştı.


0

Benim için DerivedData'yı temizlemek veya silmek sorunu çözdü.

UIViewController sınıfımı birkaç kez silmeyi ve yeniden oluşturmayı denedim ve sorunu tekrar tekrar yaşadım.

Sonra UIViewController sınıfını yeniden oluşturdum ve ona farklı bir isim verdim. Bu benim için sorunu çözdü.


0

Bu sorunu yaşadım ve yukarıda listelenmeyen bir çözüm buldum.

Benim durumumda, özel görünüm denetleyicim sınıfı tanımadığı için sınıf .h dosyasında bir sorun olduğunu görebiliyordum: UIViewController (mor değil siyahtı). Diğer tüm özel görünüm denetleyicilerinde mor renkte UIViewController vardı.

benim durumumda ve muhtemelen sizin durumunuzda, sınıfı hedeflere / inşa aşamalarına / derleme kaynakları açılır listesine eklemem gerekiyordu. .M eklenmesi gerekiyor. Diğer tüm .m'ler oradaydı ama bu değil.

Ekledikten sonra, UIViewController mor renkte göründü ve her şey yolunda gitti.


0

Benim durumum için, başka bağımlılıkları olan birden fazla projem var. Türetilmiş verileri silerek veya XCode'u yeniden başlatarak çözmeye çalıştım ama işe yaramadı. Sonunda aşağıdaki yöntemi denedim ve işe yarıyor:

Target> Yalnızca Hedef Mimarileri Oluştur> seçeneğine gidin ve hem Hata Ayıkla hem de Yayınla seçeneğini HAYIR olarak ayarlayın.

Bunu çalışma alanındaki tüm projeler için ayarlayın ve başka hata olmadığından emin olmak için yeniden derleyin. Belki mantıklı değil ama bir şekilde yaptı. Derlemem sırasında, linker hataları ve bulunamayan semboller gibi başka sorunlar yaşadım.


0

Bu sınıf görünümünün * .m dosyası için "Dosya Denetleyicisini Göster" i açın ve bu proje için "Hedef üyelik" seçeneğinin işaretini kaldırın, ardından Temizle (menü Ürün-> Temizle) ve bu proje için "Hedef üyelik" seçeneğini tekrar işaretleyin

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


0

Swift'i kullanırken benzer bir sorun yaşadım. Yorumların benim için sorunun bir parçası olduğunu öğrendim .

Varsayılan görünüm denetleyicisinden yararlandım, üzerinde bazı çalışmalar yaptım, sonra ilkinin tamamını kopyalayıp yalnızca viewDidLoad () olarak ayırarak ve sınıfı TestViewController olarak yeniden adlandırarak ikinci bir görünüm denetleyicisi oluşturdum. Yapılar çalıştı, kod çalıştırıldı. Her şey iyiydi.

Bir çıkış oluşturmak için bir UITextField'ı sürüklemeye gittiğimde, bana izin vermiyordu. Yorumlarımın hala "ViewController.swift" olduğunu fark ettim, bu yüzden yorum metnini "TestViewController.swift" olarak değiştirdim ve yeniden oluşturdum. Prizimi bağlayabildim!

Endeksleyicinin yorumları ve sınıf adlarını okuyup bir şekilde kafasının karıştığını merak ediyorum.


0

Umarım bu dışarıdaki birine yardımcı olur.

Sadece türetilmiş veri klasörünü silmem gerekiyordu. Pencere -> Düzenleyici -> Projeler -> Türetilmiş Verileri Sil'i tıklamanız gerekir

VE XCODE'U YENİDEN BAŞLATIN.

Gitmek için iyi olmalısın!


0

Yeni sınıfın "HEDEF" in bir parçası olmaması, bu yanıtlardan bazılarının da ima ettiği gibi, muhtemelen bunun temel nedenidir.

Yeni bir kakao sınıfı oluştururken, varsayılan olarak hedefe yeni sınıf ekleme seçeneği varsayılan olarak işaretlidir, ancak herhangi bir nedenle kaydet düğmesine bastığınızda bu kontrol edilmemelidir, bu sorunu yaşarsınız.

Yeni Sınıf Hedefi

Yeni sınıfı uygulama hedefine ekleyen bu geçici çözümlerden herhangi biri sorunu çözmek için çalışacaktır ve tüm bu 'düzeltmelerin' ortak olduğu bir şeydir.

XCode'un muhtemelen yeni bir dosyanın varsayılan olarak uygulamaların ana hedefine eklenmesine neden olan bazı hataları olduğunu düşünüyorum. Düzeltme , 'bozuk' sınıfınızı ana HEDEFE eklemenize neden olur


0

XCode 7.1'de, bağlayıcıyı kaynak dosyamda farklı bir noktaya eklemek işe yaradı. Değişkenlerimden birine bir sınıfmış gibi atıfta bulunduğum hata (herhangi bir anlam ifade etmiyordu). Bağlayıcıyı üstündeki yerine bu değişkenin altına eklediğimde hata oluşmayı bıraktı.


0

Sorunun farklı bir nedeni de var ... ios dışında bir şablonla yeni kakao sınıfı dosyası oluşturduysanız ... olabilirim ...

Çözüm, onu silmek ve doğru şablonla yeniden oluşturmak olacaktır. görüntü açıklamasını buraya girin

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.