Xcode 4: Создание xib UIView, не

Я пытаюсь создать нить, содержащее представление, которое будет встроено в TableViewCell. Я создал файлы интерфейса и реализации, ResultCell.h и ResultCell.m. Это запас, готовый вариант, никаких изменений кода.

Затем я создаю пустой XIB файл и перетаскиваю на него UIView. Затем я нажимаю File Owner и устанавливаю тип ResultCell. Я нажимаю на представление и устанавливаю его класс также ResultCell.

Вот проблемы, которые у меня есть:

  • При использовании представления редактора помощника (в котором я живу) файл ResultCell.h не появляется, когда я просматриваю файл ResultCell.xib. Я должен заставить его загрузить, нажав "Автоматически" и выбрав файл.
  • Когда я бросаю метку в представлении, а затем Ctrl + Click и перетаскиваю в .h, чтобы создать выход, я получаю это сообщение об ошибке: " Не удалось вставить новое выходное соединение: не найти никакой информации о классе с именем ResultCell."

Я попытался создать и воссоздать представление, и он просто не работает, и я начал терять терпение. Любая помощь будет очень, очень оценена!

Ответ 1

Это может не сработать для вашей конкретной проблемы, но иногда я получаю эту ошибку при работе с недавно созданными nib. Удаление и повторное создание перьев и контроллеров View с теми же именами, что и раньше, не помогло устранить проблему, но перезапуск Xcode сделал.

Ответ 2

Сегодня я попал в подобное состояние. Это было очень странно: я мог бы прикрепить любой XIB (новый или существующий) к уже существующему классу ViewController в проекте, но я не смог создать новый ViewController и правильно привязать его к любому XIB. Функциональность "помощник" не работала, а также функциональность IB-to-headerfile-connection.

Закрытие проекта и повторное открытие не исправили его.
Выход из XCode и перезапуск не исправить.
Создание нового проекта и проверка функциональности работали нормально, что привело меня к мысли, что в каком-то кеше что-то было повреждено.

Мое решение

  • Закройте свой проект.
  • Перейдите в папку ~/Library/Developer/XCode/DerivedData и УДАЛИТЕ все подпапки, ссылающиеся на проект, над которым вы работаете.
  • Откройте проект в XCode. Теперь проблема должна быть исправлена.

Кстати, просто запуск полной очистки, похоже, не прояснил ситуацию. Я должен был уничтожить полученные данные. Я уверен, что попал в эту позицию из-за игр git, в которые я играл, но я понятия не имел, как выйти, потому что даже переход к ранее git версиям не помог. (Это было большой идеей и в том, что это было что-то, не затронутое самим проектом.)

Ответ 3

У меня была эта проблема, и перезапуск Xcode не исправил ее. Я удалил файлы классов из проекта, а затем добавил их обратно и начал работать.

Ответ 4

У меня была такая же проблема. И я попробовал:

  • Перезапуск Xcode
  • Удаление исходных данных
  • И многое другое

Ничего из этого не получилось. Для меня это было просто:

  • Удалите файлы класса подозрительности из Project (просто удалите ссылки, да?)
  • Повторно добавьте их в проект

И сделано!

Ответ 5

Если перезапуск Xcode не работает с вами, я обнаружил, что работает с выходом нового файла .m и обратно в целевое членство.

Ответ 6

Это помогло мне:

  • из файла проекта Panel (слева) выберите файл xib, который был поврежден.
  • Нажмите на значок "Владелец файлов" в представлении редактора.
  • из панели свойств (справа) выберите третью вкладку (вверху)
  • укажите "Пользовательский класс"

Если вы не видите "панель", пожалуйста, посмотрите в верхнем правом углу окна и включите соответствующие кнопки "Просмотр". Если вы не видите кнопки "Вид", нажмите на самую верхнюю правую кнопку капсулы.

Ответ 7

Я заметил, что файл .m был перемещен внутри папки en.lproj.

Просто удалите (только ссылку).m файл из Xcode и переместите .m из en.lproj. Добавьте его снова. Это исправит проблему.

Не волнуйтесь, вы вернете все свои соединения.

Ответ 8

Сегодня я столкнулся с той же проблемой. Перезапуск XCode не устранил проблему для меня. Мне удалось вернуться к нормальной работе, используя "Удалить" вариант "Производные данные" проекта , который можно найти в разделе Организатор. Организатор говорит, что "Производные данные включают в себя индекс, результат сборки и журналы". Я полагаю, что причиной этой проблемы был либо индекс, либо вывод сборки.

Ответ 9

в XCode перейдите к организатору, щелкните проект, щелкните удалить производные данные... чем очистить проект

Ответ 10

В моем случае это помогло сделать "поддельное изменение" (просто пробел) в соответствующем файле заголовка.

Ответ 11

  • ResultCell должен быть подклассом UITableViewCell
  • Вы не должны перетаскивать UIView на пустой холст, вы должны перетащить UITableViewCell
  • Вы должны выбрать ячейку и изменить it как ваш подкласс
  • Владелец чаще всего является контроллером с выходом в ячейку

Каждый раз, когда вы хотите загрузить новую ячейку, вызовите:

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

после загрузки, используйте ячейку и установите значение ivar/outlet на ноль, готовясь к следующей загрузке

Есть и другие способы, но это обычно

Ответ 12

Возможно, что сработало для меня это... (Xcode v4.5)

Это не сработало

Я пытался контролировать перетаскивание в определение интерфейса моего .h

@interface SearchViewController : UIViewController

@end

Это сработало (возможно, так оно и должно было работать, я этого раньше не знал) См. Открытые и закрывающие скобки. Управляйте перетаскиванием после закрытой скобки.

@interface SearchViewController : UIViewController
{
}

@end

Ответ 13

Эта проблема, похоже, является ошибкой Xcode, которая ползет в основном, когда вы заменяете файл новым файлом с тем же именем. Xcode, похоже, сохраняет ссылку на старый файл с тем же именем.

Во всяком случае, способ исправить это выглядит следующим образом:

  • Очистить проект
  • Нажмите (ваш проект) в представлении "Навигатор проекта". Перейдите в раздел "Скомпилировать источники" в разделе "Сложные фазы" цели, для которой вы строите. Удалите и добавьте обратно файл .m, который дает вам проблемы.
  • В качестве альтернативы, в представлении "Инспектор файлов" ( "Утилиты" ) файла NIB в разделе "Целевое членство" снимите флажок и верните целевое имя.
  • Перезагрузите Xcode для хорошей меры.
  • Конечно, удаление и добавление обратно .m файла должно также исправить его.

(только шаги 1 и 2 фиксировали это для меня.)

Ответ 14

Ни один из вышеперечисленных обходных решений не разрешил проблему с коннектором для меня, поэтому я отложил проект моего любимого проекта, пока не наткнулся на следующий поток stackoverflow:

fooobar.com/questions/31346/...

Я работал над большим проектом в предыдущей версии XCode и отключил индексирование. Повторно включив индексирование, моя проблема теперь исправлена:

defaults delete com.apple.dt.XCode IDEIndexDisable

Теперь я могу использовать функции D & D Interface Builder. Надеюсь, это поможет другим...

Ответ 15

У меня была аналогичная проблема с проектом, написанным в Swift.

Для меня работала настройка IBOutlet в коде вроде

@IBOutlet var foo: UIView?

а затем подключите его к Interface Builder, перетащив его в маленький круг, который появился рядом с кодовой строкой.

Ответ 16

Если вы скопировали файлы из другого проекта, просто убедитесь, что вы установите флажок "Добавить в целевые объекты"

Ответ 18

Подобный симптом, но другая причина.

По-видимому, я нажимаю backspace, когда фокус был на вспомогательном представлении, потому что одна из стандартных строк комментариев шаблона шаблона перешла от//к/, что приводит к тому, что файл не компилируется.

Фиксация комментария позволила SDK разобрать файл, распознать его как UIViewController и добавить в розетку.

SO - если у вас есть эта проблема, выполните сборку или анализ, чтобы увидеть, есть ли ошибки, требующие исправления в файле .h файла. Затем попробуйте другие решения.

Ответ 19

Это может быть старая тема, но на всякий случай у кого-то такая же проблема в будущем, попробуйте удалить связанные файлы .xib,.h и .m и создать новые. Для меня UIViewController в моем файле .h не был фиолетовым, и даже отмена и ввод текста не помогли.

Ответ 20

Просто поместите строку между @implementation и @synthesize. Большинство ответов здесь имеют общее сходство. Это сработало для меня

@implementation 

@synthesize

Ответ 21

Я просто пробовал все здесь и ничего не работал (используя предварительный просмотр для Xcode 5).

Единственное, что сработало для меня, это поместить эту неполную строку в файл интерфейса:

@property (nonatomic, weak)

По какой-то причине добавление точек и действий путем перетаскивания из .xib после этого отлично работало.

Ответ 22

Для меня очистка или удаление DerivedData решила проблему.

Я пытался несколько раз удалить и воссоздать свой UIViewController, и проблема снова и снова повторялась.

Затем я воссоздал класс UIViewController и дал ему другое имя. Это решило проблему для меня.

Ответ 23

У меня была эта проблема и я нашел решение, не перечисленное выше.

В моем случае я мог видеть, что что-то не так в файле .h, потому что мой пользовательский контроллер представления не распознал класс: UIViewController (он был черным не фиолетовым). Все остальные пользовательские контроллеры представлений имели: UIViewController в фиолетовом.

в моем случае и, возможно, ваш, мне нужно было добавить класс к целям/этапам сборки/скомпилировать Источники. Необходимо добавить .m. Все остальные .m были там, но не этот.

Как только я добавил его, UIViewController появился в фиолетовом цвете, и все было хорошо.

Ответ 24

В моем случае у меня есть несколько проектов с некоторыми другими зависимостями. Я попытался решить эту проблему, удалив производные данные или перезапустив XCode, но он не сработает. В конце концов, я попробовал следующий метод, и он работает:

Перейдите в цель > Только создайте целевые архитектурные объекты > и установите для параметра "Отладка и выпуск" значение "НЕТ".

Установите это для всех проектов в рабочей области и перекомпилируйте, чтобы убедиться, что нет других ошибок. Может быть, не имеет смысла, но как-то это сделал. Во время моей компиляции у меня были другие проблемы, такие как ошибки компоновщика и символы, которые не найдены.

Ответ 25

Для файла *.m этого класса откройте "Показать инспектор файлов" и снимите флажок "Целевое членство" для этого проекта, затем выполните "Очистить" (меню "Продукт" > "Очистить" ) и снова проверьте "Целевое членство" для этого проекта

enter image description here

Ответ 26

С помощью Swift у меня была аналогичная проблема. Я узнал, что комментарии были для меня проблемой.

Я использовал контроллер представления по умолчанию, работал над ним, а затем создал второй контроллер представления, скопировав весь первый, разделив его только на viewDidLoad() и переименовав класс в TestViewController. Сборка заработала, код выполнен. Все было хорошо.

Когда я пошел, чтобы перетащить UITextField, чтобы создать выход, это не позволило мне. Я заметил, что мои комментарии все еще говорят "ViewController.swift", поэтому я изменил текст комментария на "TestViewController.swift" и перестроил. Я смог подключить свой выход!

Интересно, произошло ли то, что Indexer читал комментарии, а также имена классов и каким-то образом запутался.

Ответ 27

Надеюсь, что это поможет кому-то там.

Мне просто пришлось удалить папку с производными данными. Вам нужно щелкнуть Window → Organizer → Projects → Delete Derived Data​​p >

И RESTART XCODE.

Вы должны быть добрыми!

Ответ 28

Новый класс, не являющийся частью "TARGET", скорее всего является основной причиной этого, о чем упоминают некоторые из этих ответов.

При создании нового класса cocoa по умолчанию опция добавления нового класса в цель по умолчанию проверяется, но по какой-либо причине это не будет проверяться при нажатии кнопки "Сохранить", у вас будет эта проблема.

New Class Target

Любое из этих обходных решений, которые добавят новый класс в цель приложения, будет работать для решения проблемы, и это то, что имеет все эти "исправления".

Я думаю, что XCode, вероятно, имеет некоторые ошибки, которые заставляют новый файл, по умолчанию, НЕ добавляться в главную цель приложения. Исправление сводится к добавлению вашего "сломанного" класса в основной TARGET

Ответ 29

В XCode 7.1 работало добавление коннектора в другой точке моего исходного файла. Ошибка, которую я получал, ссылался на одну из моих переменных, как если бы это был класс (не имело никакого смысла). Ошибка прекратилась, когда я добавил соединитель ниже этой переменной, а не выше.

Ответ 30

Существует и другая причина для проблемы... если вы создали новый файл класса cocoa с шаблоном, отличным от ios... я могу случиться...

Решение состоит в том, чтобы удалить его и создать его с помощью правильного шаблона введите описание изображения здесь