“Tidak dapat menemukan informasi untuk kelas bernama ViewController”

154

Bug ini telah membuat saya gila sejak saya mulai menggunakan Xcode (4.6.3). Setiap kali saya mencoba menautkan item Storyboard ke kode saya, saya mendapatkan kesalahan:

Tidak dapat menemukan informasi untuk kelas bernama ViewController.

Ini terjadi dengan kelas khusus juga. Saya sudah mencoba metode seperti:

  • Menghapus data delegasi.
  • Menghapus dan menambahkan kembali kelas.
  • Mulai ulang Xcode.
  • Menginstal ulang Xcode.

Saya tidak bisa ctrl-drag untuk membuat koneksi di salah satu proyek saya apa pun kelasnya. Masalah yang sama terjadi dengan aplikasi template baru. Jika saya mengetikkan kode secara manual dan kemudian ctrl-drag, saya dapat membuat koneksi yang berfungsi, tetapi saya tidak dapat menambahkannya secara otomatis. Tidak ada yang saya dapat temukan sejauh ini di Internet telah membantu. Ada petunjuk?

pengguna2597451
sumber
Apakah Anda yakin bahwa file .m ViewController sudah termasuk dalam target yang tepat? (kotak centang di panel inspektur tangan kanan)
Alfie Hanssen
2
Anda memiliki view controller di storyboard Anda dan menentukan "ViewController" untuk nama kelas yang harus dipakai untuk mengelola tampilan. Periksa setiap pengontrol tampilan di storyboard: pilih pengontrol tampilan, lihat "inspektur identitas" di panel kanan, dan lihat properti "Kelas Kustom". Jika berbunyi "ViewController" maka ada masalah Anda. Masukkan nama kelas yang seharusnya mengelola view controller Anda ... atau masukkan UIViewController untuk mendapatkan implementasi UIKit default.
Nicholas Hart
1
Saya mengubah kelas khusus ke "UIViewController" di inspektur identitas, dan tidak lagi dapat ctrl-drag dari storyboard ke ViewController.h. Jika saya membuat kelas baru dan mencoba ctrl-drag ke dalamnya (setelah mengatur kelas view controllerer's sesuai), saya mendapatkan kesalahan "Tidak dapat menemukan informasi" yang sama.
user2597451
4
Saya punya masalah ini, dan memodifikasi kelas ViewController yang dibuat secara otomatis bekerja untuk saya. Misalnya, tambahkan saja NSLog()keviewDidLoad:
jb

Jawaban:

292

Apa yang memecahkan masalah ini bagi saya sebenarnya menghapus kelas dari proyek.

Langkah:

  1. Di penjelajah file proyek (panel kiri) temukan kelas dan klik kanan -> Hapus
  2. Hapus referensi (jangan pindah ke sampah karena Anda akan kehilangan kelas untuk selamanya)
  3. Klik kanan pada folder yang berisi kelas -> Tambahkan file ke ...
  4. Temukan kelas yang baru saja Anda hapus di sistem file

Ini sepertinya memaksa Xcode untuk menghubungkan kelas kembali ke storyboard.

Catatan: bagi saya yang berikut ini tidak berfungsi:

  • Menutup Xcode
  • Membersihkan proyek
  • Menghapus nama kelas dari storyboard dan memasukkannya kembali

Saya pikir ini adalah bug di pihak Apple

Chris Harrison
sumber
8
Saya mencoba ini, tetapi tidak berhasil untuk saya / -: kesalahan yang sama.
Michael
1
@Michael, Ya, sekarang saya dalam situasi di mana tidak ada yang bekerja sama sekali. Xcode adalah pelacur
Chris Harrison
5
Masalah ini kembali ke Jul 2013, pada hari ini Mei 2016 saya mendapatkan bug yang sama dan memperbaikinya dengan jawaban ini. Kenapa bertahun-tahun Apple tidak memperbaikinya untuk selamanya?
SkyWalker
3
Tidak percaya ini masih menjadi masalah. Hanya harus melakukan ini di XCode 8.1 ..
Fk
2
2017 (Versi 8.2 (8C38)) dan masih hidup, Xcode SUCKS. Itu terjadi pada saya ketika Anda menyalin-menempelkan staf UI dari storyboard dari satu adegan ke adegan lain
Jaime Agudo
135

Jika ada yang masih frustrasi dengan ini, ada trik untuk membuat semuanya berfungsi.

Apa yang saya lakukan secara manual memasukkan outlet ke kelas saya, misalnya @IBOutlet weak var someView: UIView!:, dan seret dari kode ke tampilan di IB atau storyboard. Setelah ini, saya dapat menyeret dari IB / Storyboard ke kelas saya untuk membuat koneksi, asisten editor mengenali kelas dalam "Otomatis", dll ...

Bekerja setiap saat.

Andrew Robinson
sumber
6
@ Gmeister4, jika Anda membuat outlet dalam kode Anda, itu menunjukkan lingkaran kecil di sebelah kiri outlet. Klik dan seret dari lingkaran itu ke tampilan di IB atau Storyboard untuk membuat koneksi Anda.
Andrew Robinson
4
Lebih mudah daripada jawaban teratas. +1
cph2117
2
Masih tidak dapat melakukannya dengan cara yang benar, bahkan setelah ini - tetapi setidaknya ini berhasil!
Alexandre G
1
Tidak ada jawaban di atas yang berfungsi untuk saya. Hanya jawaban ini yang berhasil untuk saya.
coolcool1994
1
Luar biasa, itu dia!
Sam
38

Bagi saya menghapusnya dari keanggotaan target Anda di kolom kanan dan menambahkannya lagi berhasil masukkan deskripsi gambar di sini

Ruud Visser
sumber
Ini juga berhasil dari saya. Saya telah menduplikasi kelas ViewController.swift, dan ini tampaknya menjadi solusi.
UberJames
Saya pikir ini adalah bug dari Xcode yang masih ada di Xcode 8.0
jiangjiefs
Ini terjadi sekarang kepada saya di Xcode 8.3.3 dan solusi Anda adalah yang paling sederhana dan berfungsi. Jadi terima kasih !!!
RoberRM
Masih ada di Xcode 11.5 (maksud saya serius Apple ??). Hanya solusi yang bekerja untuk saya yang tercantum di sini.
Christophe Fondacci
12

Kadang-kadang Xcode tidak karena VC tidak mereferensikan file kelas. Solusi sederhana untuk ini adalah:

tulis properti secara manual seperti yang diberikan.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Ini akan membuat tanda tautan kosong sebelum @IBOutlet , buka proyek Anda di asisten editor lalu klik tanda tautan masukkan deskripsi gambar di sinidan seret ke tampilan yang ingin Anda sambungkan (saya telah terhubung dengan TableView). dan itu saja. Selamat menikmati Coding !!!

MRizwan33
sumber
8

Saya baru saja mengalami masalah ini pada April 2017 dengan Xcode 8

Cukup membuat outlet melalui kode dan kompilasi memperbaikinya. misalnya:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Anda harus mencintai Xcode ...

Sunting: Masih terjadi di Xcode 9

Jesus Rodriguez
sumber
7

langkah-langkah berikut ini berfungsi untuk saya, harap itu juga berfungsi untuk Anda

1- Anda harus membuka kembali proyek Anda setelah menutup Xcode.

2- Tunggu pengindeksan file proyek

3 - Periksa apakah itu berfungsi atau tidak

4 - Jika masih tidak bekerja ikuti langkah 5, jika tidak senang untuk Anda :)

5- Bersihkan dan Bangun target proyek Anda

masukkan deskripsi gambar di sini

Amr Angry
sumber
7

Saya mencoba segalanya dan itu tidak berhasil, jadi bagi saya yang berhasil adalah:

  • Clean Build folder and project.
  • Buka Proyek (Jendela -> Proyek)
  • Temukan proyek Anda di daftar dan hapus Data yang Diperoleh
  • Tutup Xcode
  • Nyalakan kembali komputer (tanpa memilih untuk membuka kembali jendela yang terbuka)
  • jalankan Xcode
  • Kerja!

Semua pengendali pandangan saya tidak dikenali, jadi menghapus semua file dan menambahkan kembali bukanlah pilihan karena ini adalah proyek besar.

gmogames
sumber
4

Bagi saya, yang berikut ini berhasil:

  1. Lakukan 'clean' dan 'clean build folder' (tekan 'option' pada menu Product untuk mendapatkan perintah 'clean build folder'

  2. Hentikan Xcode

  3. Di terminal, buka folder data yang diturunkan:

    (/ Pengguna // Perpustakaan / Pengembang / Xcode / DerivedData)

Hapus dir data turunan untuk proyek Anda.

  1. Lambaikan ayam mati di udara

  2. Mulai Xcode

Joe149
sumber
3

Saya harus melakukan kombinasi dari beberapa jawaban sejauh ini:

  1. Hapus nama kelas khusus dari storyboard.

(Klik tombol kuning di kiri atas controller tampilan di storyboard -> pergi ke inspektur identitas (opsi + perintah + 3) -> hapus nama kelas kustom di atas)

  1. Hapus referensi ke file controller tampilan.

(Klik kanan file -> hapus -> hapus referensi)

  1. Tambahkan file view controller kembali ke proyek.

(Klik kanan folder tempat file itu -> "Tambahkan file ke [proyek]")

  1. Tambahkan nama kelas khusus kembali ke storyboard.
yndolok
sumber
3

Jika orang-orang mencoba hal-hal di atas dan masih ada yang tidak berhasil, trik aneh yang berhasil bagi saya adalah menambahkan outlet di ruang putih. Ini berfungsi jika tidak ada baris lain langsung di atas atau di bawah garis yang Anda tambahkan. Aneh, tapi berhasil!

Elliot KG
sumber
3

Apa yang berhasil bagi saya adalah, alih-alih menyeret koneksi dari tombol ke kode, adalah:

  1. Mengklik item storyboard yang diinginkan.
  2. Membuka inspektur koneksi (panel kanan)
  3. Menyeret dari lingkaran + ke area kode. Seperti itu:

setelah saya menautkan kode saya dengan cara ini, itu berfungsi normal setelahnya.

Hayden Crabb
sumber
3

Tetap Sesuai Target!

Saya menambahkan kelas baru dengan Xib dan saya mulai melihat masalah ini dan saya menghabiskan waktu dengan baik mencari jawaban di sini dan melihat apakah ada yang membuat perbedaan.

Ketika itu terjadi, saya memiliki beberapa target di ruang kerja saya dan sering kali saya harus beralih di antara mereka.

Ternyata menambahkan file baru akan memulai indeks ulang di Xcode. Tetapi jika Anda menunjuk pada target yang salah maka pengindeksan cenderung tidak berarti dan selama tarik untuk menghubungkan Xcode tidak akan dapat menemukan kelas Anda.

Pendeknya

Langkah 1.

Seleksi Target

Pastikan Anda memiliki target yang benar sehingga pengindeksan masuk akal.

Damo
sumber
3

Ini bekerja untuk saya:

  1. Lakukan ' Bersihkan folder bangun '
    (tekan dan tahan tombol 'opsi' dan pergi ke " Produk " untuk mengaksesnya.
  2. Lakukan "Clean" (CMD-SHIFT-K) sederhana dari menu " Produk ".
  3. Bangun proyek untuk membiarkan Xcode mengkompilasi file. Juga, biarkan indeks file jika perlu.

Di samping catatan, saya tidak yakin apakah ini membantu tetapi saya juga menghapus data yang diturunkan sebelum melakukan langkah-langkah di atas (preferensi Xcode> Lokasi)

programmer
sumber
2

Pilih ViewController di storyBoard, hapus nilai saat ini di panel Kanan / "Kelas pelanggan" / "kelas" kemudian tambahkan kembali kelas kontrol (ketik: "SampleViewController" ...), masukkan. -> Itu berhasil untuk saya

tungnv
sumber
2

Saya mencoba semua jawaban ini, masalah bagi saya terkait dengan Xcode tidak dapat mengindeks file. Saya memperbaikinya dengan hanya berhenti dari Xcode dan membuka kembali proyek. Tentu saja saya melakukan itu setelah mencoba semua solusi di atas: p

JohnVanDijk
sumber
2

Produk> Bersih (Command - Shift - K) memperbaikinya untuk saya!

Jangles
sumber
2

Ini adalah langkah TERMUDAH yang saya lakukan untuk memperbaiki masalah ini.

  1. Saya membersihkan proyek
  2. Seret tombol baru di pengontrol tampilan.
  3. Bangun proyek.
  4. Hubungkan tombol yang baru diseret ke kelas (outlet atau tindakan).
  5. Lalu voila !!! Outlet lain sekarang dapat dihubungkan ke kelas lagi!
pengguna2480567
sumber
1

Sebagai pengalaman pengujian saya, jika Anda menghapus kelas yang dikaitkan dalam Xcode, dan daripada menambahkan file lagi, maka masalah ini akan terjadi.

inix
sumber
1

Biasanya ketika ini terjadi pada saya, saya hanya belum menyimpan kode untuk kelas. Langsung saja ke kode dan tekan cmd + s dan itu sering memperbaiki masalah dengan cara yang benar.

Pembatas
sumber
1

Hanya perlu membersihkan dan membangun kembali proyek.

Carolina Aguilar
sumber
1

Tidak ada langkah-langkah di atas yang berhasil untuk saya, tetapi saya pikir saya mungkin telah menemukan masalah. Setidaknya itu yang berhasil bagi saya, dan itu bukan bug di Xcode.

Ketika di asisten editor lihat di bagian atas jendela yang memiliki kode untuk viewController Anda. Opsi ketiga dari kanan kemungkinan mengatakan "Manual", tetapi seharusnya mengatakan "Otomatis". Setelah saya mengubah ini, masalahnya teratasi!

John Nolan
sumber
1

Saya mendapatkan masalah yang sama, "Tidak dapat menemukan kelas bernama ..." dan penyebabnya bodoh pada bagian saya setelah saya menemukan jawabannya. Pastikan Anda tidak menyeret dari item ke antarmuka - pastikan item tersebut diseret ke kelas itu sendiri

Will Buffington
sumber
1

Saya mencoba SEGALA SESUATU!

Pastikan nama kelas UIViewController Anda tidak mengandung kata "Test"

Laporan Bug dikirimkan.

Aaron Kreipe
sumber
Jelas tidak mengatakan bahwa ini adalah satu-satunya penyebab. Hanya saja ini hal lain yang harus diperhatikan.
Aaron Kreipe
Bantu saya menghapus semua data yang diperoleh, bersihkan proyek. Tapi ini bug dan Anda benar.
Genevios
0

Saya akan mencoba untuk membuat kembali file .m dan .h yang dimaksud dan memberi mereka nama asli, bukan generik seperti "ViewController". Cobalah sesuatu yang lebih sesuai dengan apa yang Anda ingin file itu lakukan, dan diakhiri dengan View Controller (yaitu "PizzaDecoraterViewController")

Kemudian pilih ViewController yang ingin Anda sambungkan ke file-file itu. Pastikan Anda memilih ViewController, bukan hanya objek di dalamnya. Klik bilah hitam di bagian bawah (yang memiliki ikon "First Responder" dan "Exit"). Seluruh ViewController harus menguraikan warna biru. Lalu pergi ke bagian Kelas Kustom di Inspektur Identitas dan Anda akan melihat "UIViewController" berwarna abu-abu di bidang pertama. Di bidang itu, ketikkan nama file .h atau .m yang ingin Anda sambungkan (Mulai ketikkan PizzaDecorator ... dan itu akan melakukan sedikit pelengkapan otomatis). Lalu tekan ENTER.

Saat Anda membuka Asisten Editor, pastikan bahwa file yang Anda coba seret dan jatuhkan adalah, sebenarnya, file yang benar.

Jika Anda telah melakukan semua seperti yang dikatakan di atas, maka itu akan berhasil.

CaptJak
sumber
Sayangnya, masih tidak berhasil. Saya sudah mencoba melakukan ini sebelumnya tetapi tidak berhasil. Berikut screenshotnya: i.imgur.com/5ixtcps.png
user2597451
Hah. Aneh. Cobalah menambahkannya secara terprogram (yaitu @property (nonatomic, strong) IBOutlet UIView * test;) dan kemudian ketika lingkaran kecil muncul di sebelahnya, seret dan lepas ke UIView Anda.
CaptJak
Itu bekerja dan selalu memiliki (dan aplikasi tampaknya berjalan baik-baik saja), tetapi saya mencoba untuk menyelesaikan masalah yang tidak akan ditambahkan secara otomatis.
user2597451
Nah, jika bekerja seperti itu, maka itu harus bekerja dengan cara lain. Bug di Xcode Anda? Cobalah untuk mendapatkan versi sebelumnya (seperti 4.6.2 atau sesuatu) dan instal itu. Kalau tidak, ummmmmmmmmmmmmmm ...... ya ....
CaptJak
Ya, itulah yang saya takutkan. Mencopot dan menginstal ulang belum berfungsi, saya berharap saya melakukan kesalahan. Apa cara terbaik untuk menurunkan versi salinan Xcode saya?
user2597451
0

Ketika saya mengomentari jawaban @ ChrisHarrison, hal-hal itu tidak berhasil untuk saya, tetapi menghapus data turunan seperti pada saya membuatnya bekerja dengan menghapus data turunan seperti di https://stackoverflow.com/a/16182672/1449799

Michael
sumber
0

Hapus file (hanya referensi) dan tambahkan file lagi.

Tomafer
sumber
0

Nah dalam kasus saya, hal yang berhasil (ini aneh, tapi berhasil) adalah sebagai berikut:

Cobalah untuk menambahkan sumber data (mis. Ekstensi ke ViewController seperti UITableViewDataSource). Xcode akan mencoba memuat ulang ViewController. Lalu saya menulis beberapa metode protokol (pada awalnya Xcode tidak melengkapi metode secara otomatis, tetapi menuliskannya secara manual), kemudian saya menambahkan IBOutlets, dan terakhir, saya menghapus sumber data.

Contoh:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}
José Roberto Abreu
sumber
0

Bagi saya, tampilan yang saya tentukan kelas khusus untuk gagal dikompilasi oleh pembangun antarmuka. Itu ditandai @IBDesignable.

Menghapus @IBDesignable, dan kemudian menambahkan outlet saya, dan menandainya sebagai @IBDesignablemenyelesaikan masalah dalam kasus saya.

Nick DiZazzo
sumber
0

Coba hapus Data Turunan untuk proyek

david.gol
sumber
0

coba saja ini

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
yousuke
sumber