Xcode 4: Создание UIView XIB, не правильно подключается

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

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

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

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

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

33 ответа

Решение

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

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

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

Мое решение

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

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

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

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

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

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

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

И сделано!

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

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

  1. из панели файла проекта (слева) выберите сломанный xib-файл.
  2. Щелкните значок "Владелец файлов" в представлении редактора.
  3. из панели свойств (справа) выберите третью вкладку (вверху)
  4. укажите "Пользовательский класс"

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

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

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

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

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

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

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

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

Во всяком случае, кажется, что способ исправить это:

  1. Очистить проект
  2. Нажмите (Ваш проект) в представлении Навигатор проекта. Перейдите к Компилировать источники в Фазах сборки цели, для которой вы строите. Удалите и добавьте обратно.m файл, который доставляет вам неприятности.
  3. Либо в окне "Инспектор файлов" (представление "Утилиты") файла NIB в разделе "Целевое членство" снимите флажок и снова проверьте имя цели.
  4. Перезапустите XCode для хорошей меры.
  5. Конечно, удаление и добавление обратно только файла.m также должно исправить это.

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

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

/questions/19980524/xcode-ispolzuet-bolshuyu-pamyat-sedaet-vsyu-pamyat-v-operativnoj-pamyati/19980535#19980535

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

defaults delete com.apple.dt.XCode IDEIndexDisable

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

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

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

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

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

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

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

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

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

@interface SearchViewController : UIViewController

@end

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

@interface SearchViewController : UIViewController
{
}

@end

У меня была похожая проблема с проектом, написанным на Swift.

Что мне помогло, так это настройка IBOutlet в таком коде

@IBOutlet var foo: UIView?

и затем соедините его с Интерфейсным Разработчиком, перетаскивая к маленькому кругу, который появился прямо рядом со строкой кода.

Переименование файлов классов может отсоединить их от XIB. Этот ответ помог мне обнаружить это:

Ctrl-Drag от кнопки к методу не работает. Xcode / Interface Builder

Убедитесь, что ваш собственный класс установлен правильно в Identity Inspector.

Когда я пытаюсь автоматически сгенерировать функцию действия следующим образом, я обнаружил эту проблему.

Но я могу сделать это с помощью ниже, сначала вручную написать функцию действия, а затем перетащить в область @IBAction Funciton

Используя Swift, у меня была похожая проблема. Я узнал, что комментарии были частью проблемы для меня.

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

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

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

Я только что столкнулся с этим сегодня на Xcode 12.1.

Я сделал типичное удаление производных данных и даже перезагрузил компьютер, но безуспешно.

В конце концов я смог это исправить.

  1. Выбор контроллера представления в IB
  2. Измените имя класса на правой панели в разделе Custom Class> Class на случайное имя класса.
  3. Измените имя класса обратно на правильное имя класса.

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

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

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

@property (nonatomic, weak)

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

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

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

У меня та же проблема. Восстановление проекта помогает мне Command+B,

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

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

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

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

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

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

Просто вставьте грань между @implementation и @synthesize. У большинства ответов здесь есть что-то общее. У меня сработало

@implementation 

@synthesize

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

Я просто должен был удалить папку производных данных. Вам нужно нажать Окно -> Органайзер -> Проекты -> Удалить производные данные

И перезапустите XCODE.

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

У меня была эта проблема, и я нашел решение, не указанное выше.

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

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

После того, как я его добавил, появился: UIViewController фиолетового цвета, и все работало нормально.

Новый класс, не являющийся частью "ЦЕЛИ", вероятно, является основной причиной этого, на что ссылаются некоторые из этих ответов.

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

Цель нового класса

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

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

Другие вопросы по тегам