"Не вдалося знайти будь-яку інформацію для класу з назвою ViewController"


154

Ця помилка заганяє мене з того часу, як я почав використовувати Xcode (4.6.3). Кожен раз, коли я намагаюся зв’язати елемент «Розгортки» зі своїм кодом, я отримую помилку:

Не вдалося знайти жодної інформації для класу з назвою ViewController.

Це трапляється і з користувацькими класами. Я спробував такі методи, як:

  • Видалення даних делегата.
  • Видалення та повторне додавання класів.
  • Перезапуск Xcode.
  • Перевстановлення Xcode.

Я не можу перетягнути ctrl, щоб створити з'єднання в жодному з моїх проектів, незалежно від класу. Ця ж проблема трапляється і з абсолютно новим шаблоном програми. Якщо ввести код вручну, а потім перетягнути ctrl, я можу встановити робоче з'єднання, але не можу додати його автоматично. Ніщо, що я досі не змогла знайти в Інтернеті, не допомогло. Якісь покажчики?


Ви втричі впевнені, що файл ViewController .m включений у відповідну ціль? (прапорець у правій панелі інспектора)
Alfie Hanssen

2
У вашій дошці розміщення є контролер перегляду та вказано "ViewController" для імені класу, який повинен бути створений для керування поданням. Перевірте кожен контролер подання на дошці: виберіть контролер перегляду, подивіться на "інспектора ідентичності" на правій панелі та подивіться на властивість "Спеціальний клас". Якщо він читає "ViewController", то є ваша проблема. Введіть ім'я класу, який повинен керувати вашим контролером перегляду ... або поставте UIViewController, щоб отримати реалізацію UIKit за замовчуванням.
Ніколас Харт

1
Я змінив спеціальний клас на "UIViewController" у інспектора ідентичності, і більше не міг ctrl-перетягнути з дошки розгортки в ViewController.h. Якщо я створю новий клас і спробую перетягнути його в клавішу ctrl (після відповідного встановлення класу контролера перегляду), я отримаю ту саму помилку "Не можу знайти інформацію".
користувач2597451

4
У мене виникла ця проблема, і для мене працювала модифікація автоматично створеного класу ViewController. Наприклад, просто додайте NSLog()доviewDidLoad:
jb

Відповіді:


292

Що вирішило це питання для мене, фактично було видалення класу з проекту.

Кроки:

  1. У програмі провідника файлів проекту (ліва панель) знайдіть клас та клацніть правою кнопкою миші -> Видалити
  2. Видаліть посилання (не рухайтесь до сміття, оскільки ви назавжди втратите клас)
  3. Клацніть правою кнопкою миші на папці, яка містила клас -> Додати файли до ...
  4. Знайдіть клас, який ви тільки що видалили, у файловій системі

Це, здається, змушує Xcode зв’язати клас назад у розкадровці.

Примітка: для мене наступне не працювало:

  • Закриття Xcode
  • Прибирання проекту
  • Видалення назви класу із таблиці та повторного введення

Я думаю, що це помилка з боку Apple


8
Я спробував це, але у мене це не вийшло / -: така ж помилка.
Майкл

1
@Michael, Так, зараз я переживаю ситуацію, коли жодне з перерахованих вище взагалі не працює. Xcode - це ***
Chris Harrison

5
Це питання починається з липня 2013 року, станом на сьогодні травень 2016 року я отримую таку ж помилку і виправляю її з цією відповіддю. Чому за стільки років Apple не виправляє це назавжди?
SkyWalker

3
Не можу повірити, це все ще проблема. Просто довелося це зробити на XCode 8.1 ..
fisk

2
2017 (версія 8.2 (8C38)) та ще живий, Xcode SUCKS. Це трапляється зі мною, коли ви копіюєте та вставляєте співробітників інтерфейсу з розкладок з однієї сцени в іншу
Jaime Agudo

135

У випадку, якщо хтось все ще засмучений цим, існує хитрість налагодити роботу.

Що я роблю, це вручну ввести розетку в свій клас, наприклад: @IBOutlet weak var someView: UIView!і перетягнути з коду на представлення в ІБ або розгортці. Після цього я можу перетягнути з IB / Розгортки до мого класу, щоб встановити з'єднання, помічники редактора розпізнають клас у "Автоматичному" тощо.

Працює кожен раз.


6
@ Gmeister4, якщо ви створюєте розетку у своєму коді, вона показує невелике коло зліва від розетки. Клацніть та перетягніть його з цього кола до подання в IB чи Дошці аркушів, щоб встановити з'єднання.
Ендрю Робінсон

4
Простіше, ніж верхня відповідь. +1
cph2117

2
Ще не вдається зробити це належним чином, навіть після цього - але принаймні це працює!
Олександр Г

1
Жодна з наведених відповідей не працювала для мене. Тільки ця відповідь спрацювала для мене.
coolcool1994

1
Дивовижно, це все!
Сем

38

Для мене видалення їх із цільового членства у правій колонці та додавання їх знову зробило свою справу введіть тут опис зображення


Це теж працювало у мене. Я копіював клас ViewController.swift, і це, здається, є рішенням.
UberJames

Я думаю, що це помилка Xcode, яка все ще існує в Xcode 8.0
jiangjiefs

Це сталося зараз зі мною в Xcode 8.3.3, і ваше рішення є найпростішим і працює. Тож дякую !!!
RoberRM

Досі існують у Xcode 11.5 (я маю на увазі серйозно Apple ??). Тут наведено єдине рішення, яке працювало для мене.
Крістоф Фондчічі

12

Іноді Xcode відбувається через те, що VC не посилається на файл класу. Просте рішення для цього:

записати властивість вручну, як задано.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Це зробить порожній знак посилання перед @IBOutlet , відкрийте проект у помічнику редактора, потім натисніть знак посилання введіть тут опис зображеннята перетягніть в Перегляд, який ви хочете підключити (я підключився до TableView). і це все. Насолоджуйтесь щасливим кодуванням !!!


8

У мене якраз була ця проблема в квітні 2017 року з Xcode 8

Просто створити розетку за допомогою коду та скласти її зафіксовано. наприклад:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Ви повинні полюбити Xcode ...

Правка: все ще відбувається на Xcode 9


7

Наступні кроки працює для мене, сподіваюся, що він працює і для вас

1- Вам потрібно знову відкрити проект після закриття Xcode.

2- Зачекайте на індексацію файлів проекту

3- Перевірте, працює він чи ні

4- Якщо все ще не працює, виконайте крок 5, якщо не радий тобі :)

5- Очистіть та складіть ціль свого проекту

введіть тут опис зображення


7

Я спробував усе, і це не вийшло, тому для мене те, що працювало:

  • Очистити папку і проект.
  • Відкриті проекти (Вікно -> Проекти)
  • Знайдіть свій проект у списку та видаліть отримані дані
  • Закрити Xcode
  • Перезавантажте комп’ютер (не вибираючи знову відкривати вікна, які відкриті)
  • запустити Xcode
  • Працюйте!

Усі мої контролери перегляду не були розпізнані, тому видалення всіх файлів та повторне додавання не було можливим, оскільки це великий проект.


4

Для мене працювали наступні:

  1. Виконайте команду "Очистити" та "Очистити папку збірки" (натисніть "Опція" у меню Продукт, щоб отримати команду "Очистити папку збірки").

  2. Зупинити Xcode

  3. У терміналі перейдіть до похідної папки даних:

    (/ Користувачі // Бібліотека / Розробник / Xcode / DerivedData)

Видаліть похідні дані з вашого проекту.

  1. Хвиля мертвої курки в повітрі

  2. Запустити Xcode


3

Мені довелося виконати комбінацію пари відповідей:

  1. Видаліть назву користувацького класу з дошки.

(Клацніть на жовтій кнопці у верхньому лівому куті контролера перегляду на дошці повідомлень -> перейдіть до інспектора ідентифікації (опція + команда + 3) -> видаліть назву спеціального класу вгорі)

  1. Видаліть посилання на файл контролера перегляду.

(Клацніть правою кнопкою миші файл -> видалити -> видалити посилання)

  1. Додайте файл контролера перегляду назад до проекту.

(Клацніть правою кнопкою миші папку, у якій був файл -> "Додати файл до [project]")

  1. Додайте назву спеціального класу назад на аркуш розкладу.

3

Якщо люди намагаються сказати вище, а все ще не працює, дивний трюк, який працював на мене, - додавання розетки в шматок пробілу. Він працює, якщо немає інших рядків безпосередньо над або під доданим рядком. Дивно, але спрацювало!


3

Для мене працювало те, що замість перетягування з'єднання від кнопки до коду було:

  1. Клацнувши потрібний елемент раскадровки.
  2. Відкриття інспектора підключення (права панель)
  3. Перетягування від кола + до області коду. Так:

після того, як я зв'язав свій код таким чином, з цього часу він працював нормально.


3

Будьте цільовими!

Я додав новий клас із Xib, і я почав бачити цю проблему, і я добре провів час, переглядаючи відповіді тут і бачивши, чи є щось із цього в цьому.

Як це буває, у мене на робочому просторі є кілька цілей, і часто мені доводиться перемикатися між ними.

Виявляється, додавання нових файлів запустить переіндексацію в Xcode. Але якщо ви вказуєте на неправильну ціль, то індексація, ймовірно, безглузда, і під час перетягування для підключення Xcode не вдасться знайти ваш клас.

Коротко

Крок 1.

Цільове виділення

Переконайтеся, що ви встановили правильний цільовий набір, щоб індексація мала сенс.


3

Це працювало для мене:

  1. Виконайте " Очистити папку збірки "
    (натисніть і утримуйте клавішу "Опція" та перейдіть до меню " Продукт ", щоб отримати доступ до неї.
  2. Виконайте просте "Очистити" (CMD-SHIFT-K) у меню " Продукт ".
  3. Побудуйте проект, щоб дозволити Xcode збирати файли. Також дозвольте йому індексувати файли, якщо це необхідно.

З боку, я не впевнений, чи це допомогло, але я також видалив отримані дані перед виконанням вищезазначених кроків (налаштування Xcode> Locations)


2

Виберіть ViewController у storyBoard, видаліть поточне значення на панелі правої панелі / "Клас клієнта" / "клас", після чого знову додайте клас управління (тип: "SampleViewController" ...), введіть. -> Це для мене робота


2

Я спробував усі ці відповіді, проблема для мене була пов'язана з тим, що Xcode не може індексувати файли. Я вирішив це, просто закривши Xcode та повторно відкривши проект. Звичайно, я це зробив, випробувавши всі вищезазначені рішення: с


2

Продукт> Очистити (Command - Shift - K) виправив це для мене!


2

Це найпростіший крок, який я зробив, щоб виправити цю проблему.

  1. Я прибираю проект
  2. Перетягніть нову кнопку в контролер перегляду.
  3. Побудуйте проект.
  4. Підключіть щойно перетягнуту кнопку до класу (або розетки, або дії).
  5. Тоді вуаля !!! Інші торгові точки тепер можна знову підключити до класу!

1

Як мій досвід тестування, якщо ви видалите клас, який був пов’язаний з Xcode, і знову додаєте файл, тоді ця проблема виникне.


1

Зазвичай, коли це трапляється зі мною, я просто ще не зберег код для класу. Просто перейдіть до коду та натисніть cmd + s, і це часто виправляє проблему правильним шляхом.



1

Жоден із зазначених вище кроків не працював для мене, але я думаю, що я, можливо, виявив цю проблему. Принаймні, це те, що працювало для мене, і це не помилка в Xcode.

Перебуваючи у помічнику редактора, подивіться у верхній частині вікна, у якому є код для вашого перегляду Контролер. Третій варіант праворуч, ймовірно, говорить "Керівництво", але він повинен говорити "Автоматично". Як тільки я змінив це, проблема була вирішена!


1

У мене виникала подібна проблема: "Не вдалося знайти клас з іменем ...", і причина була дурна з мого боку, як тільки я зрозумів це. Переконайтеся, що ви не перетягуєте елемент з інтерфейсу - переконайтеся, що його перетягують до самого класу


1

Я спробував ВСЕ!

Переконайтесь, що назва класу вашого UIViewController не містить слова "Тест"

Звіт про помилку надіслано.


Однозначно не кажучи, що це єдина причина. Тільки що це ще одна річ, яку слід пам’ятати.
Аарон

Допоможіть мені видалити всі отримані дані, очистіть проект. Але це помилка, і ти маєш рацію.
Геневіос

0

Я б спробував переробити .m і .h файли, про які йдеться, і дав би їм оригінальну назву, а не загальну, як "ViewController". Спробуйте щось більше відповідно до того, що ви хочете, щоб зробити цей файл, і закінчуючи в контролері перегляду (тобто "PizzaDecoraterViewController")

Потім виберіть ViewController, який потрібно підключити до цих файлів. Переконайтесь, що ви обрали ViewController, а не лише об’єкт всередині. Клацніть чорну смугу внизу (таку, на якій значки "Перший відповідь" та "Вихід"). Весь ViewController повинен бути контуру синього кольору. Потім перейдіть до розділу «Спеціальний клас» інспектора ідентичності, і ви побачите в першому полі сірувату «UIViewController». У цьому полі введіть ім'я файлу .h або .m, до якого ви хочете підключитися (Почніть вводити PizzaDecorator ... і він повинен зробити трохи автоматичного завершення). Потім натисніть ENTER.

Відкриваючи помічник редактора, переконайтеся, що файл, до якого ви намагаєтеся перетягнути, насправді є правильним файлом.

Якщо ви зробили все, як було сказано вище, тоді це має спрацювати.


На жаль, все ще не працює. Я намагався це робити раніше, але безрезультатно. Ось знімок екрана: i.imgur.com/5ixtcps.png
користувач2597451

Ага. Дивно. Спробуйте додати їх у програмному (тобто @property (неатомічний, сильний) тест IBOutlet UIView *;), а тоді, коли поруч із ним з’явиться маленьке коло, перетягніть його до UIView.
CaptJak

Це працює і завжди є (і програми, здається, працюють нормально), але я намагаюся вирішити проблему, яка не додаватиметься автоматично.
користувач2597451

Ну, якщо це працює так, то це має працювати інакше. Помилка у вашому XCode? Спробуйте отримати попередню версію (наприклад, 4.6.2 чи іншу) та встановити її. Інакше, ummmmmmmmmmmmmmm ...... так ....
CaptJak

Так, я цього боюся. Видалення та перевстановлення не спрацювало, я сподівався, що я помилився. Який найкращий спосіб зменшити примірник Xcode?
користувач2597451

0

Коли я коментував відповідь @ ChrisHarrison, ці речі не спрацювали для мене, але видаливши отримані дані, як у мене, я змусив її працювати, видаливши отримані дані, як у https://stackoverflow.com/a/16182672/1449799



0

Ну в моєму випадку, що спрацювало (це дивно, але працювало) - це наступне:

Спробуйте додати джерело даних (наприклад, розширення до ViewController, як UITableViewDataSource). Xcode спробує перезавантажити ViewController. Потім я написав якийсь метод протоколу (на початку Xcode не заповнював автозаповнення методів, а виписав його вручну), потім я додав IBOutlets, а потім, нарешті, видалив джерело даних.

Приклад:

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.
}

0

Для мене представник, який я вказав для власного класу, не змогла скласти конструктор інтерфейсів. Це було позначено@IBDesignable .

Вилучіть @IBDesignable, а потім додайте свої торгові точки, а потім позначте її як @IBDesignableвирішену проблему в моєму випадку.



0

просто спробуйте це

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.