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
Если вы скопировали файлы из другого проекта, просто убедитесь, что вы установите флажок "Добавить в целевые объекты"
Ответ 17
Переименование файлов классов может отделить их от XIB. Этот ответ помог мне открыть это:
Ctrl-Drag от кнопки к методу не работает. Xcode/Interface Builder
Убедитесь, что ваш собственный класс правильно установлен в Инспекторе идентификации.
Ответ 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 Datap >
И RESTART XCODE.
Вы должны быть добрыми!
Ответ 28
Новый класс, не являющийся частью "TARGET", скорее всего является основной причиной этого, о чем упоминают некоторые из этих ответов.
При создании нового класса cocoa по умолчанию опция добавления нового класса в цель по умолчанию проверяется, но по какой-либо причине это не будет проверяться при нажатии кнопки "Сохранить", у вас будет эта проблема.
![New Class Target]()
Любое из этих обходных решений, которые добавят новый класс в цель приложения, будет работать для решения проблемы, и это то, что имеет все эти "исправления".
Я думаю, что XCode, вероятно, имеет некоторые ошибки, которые заставляют новый файл, по умолчанию, НЕ добавляться в главную цель приложения. Исправление сводится к добавлению вашего "сломанного" класса в основной TARGET
Ответ 29
В XCode 7.1 работало добавление коннектора в другой точке моего исходного файла. Ошибка, которую я получал, ссылался на одну из моих переменных, как если бы это был класс (не имело никакого смысла). Ошибка прекратилась, когда я добавил соединитель ниже этой переменной, а не выше.
Ответ 30
Существует и другая причина для проблемы... если вы создали новый файл класса cocoa с шаблоном, отличным от ios... я могу случиться...
Решение состоит в том, чтобы удалить его и создать его с помощью правильного шаблона
![введите описание изображения здесь]()