it-swarm.com.ru

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

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

83
Tim Sullivan

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

80
Defragged

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

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

Мое решение

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

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

112
David Pisoni

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

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

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

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

И сделано! 

13
Dr.Kameleon

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

13
jasongregori

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

9
Duane Fields

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

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

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

3
Ivan Dossev

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

2
Peter Lapisu

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

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

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

2
A.S.

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

2
jakob.j

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

2
Praveen Kumar

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

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

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

@interface SearchViewController : UIViewController

@end

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

@interface SearchViewController : UIViewController
{
}

@end
1
Mouli

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

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

@IBOutlet var foo: UIView?

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

1
Patrick

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

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

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

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

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

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

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

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

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

1
bshirley

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

https://stackoverflow.com/a/15873770/2846800

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

defaults delete com.Apple.dt.XCode IDEIndexDisable

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

1
user2846800

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

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

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

0
Fabian Stark

У меня та же проблема. Перестройка проекта мне помогает Command+B.

0
Eugene Mekhedov

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

@implementation 

@synthesize
0
user2371963

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

0
S.G.

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

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

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

0
Alexander Liberson

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

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

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

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

0
software evolved

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

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

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

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

0
Ronaldoh1

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

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

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

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

0
Antonio Ciolino

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

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

@property (nonatomic, weak)

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

0
djibouti33

Если вы скопировали файлы из другого проекта, просто установите флажок «Добавить к целям»

0
John67

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

Решением было бы удалить его и заново создать с правильным шаблоном  enter image description here

0
mihir mehta

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

 enter image description here

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

0
Kris Roofe

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

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

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

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

0
Michendo

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

0
user2683747

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

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

New Class Target

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

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

0
Michael Bopp

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

Перейдите к target> Build Target Only Architectures> и установите для параметров Debug и Release значение NO.

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

0
morph85

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

enter image description here

0
Kozlov V