Xcode 4: Создание UIView XIB, не правильно подключается - PullRequest
84 голосов
/ 15 июля 2011

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

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

Вот мои проблемы:

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

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

Ответы [ 32 ]

1 голос
/ 06 октября 2012

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

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

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

@interface SearchViewController : UIViewController

@end

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

@interface SearchViewController : UIViewController
{
}

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

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

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

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

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

1 голос
/ 24 февраля 2014

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

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

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

defaults delete com.apple.dt.XCode IDEIndexDisable

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

1 голос
/ 22 июля 2014

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

Что мне помогло, так это настроить IBOutlet в коде, подобном этому

@IBOutlet var foo: UIView?

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

1 голос
/ 01 октября 2013

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

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

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

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

0 голосов
/ 10 июля 2015

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

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

New Class Target

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

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

0 голосов
/ 01 февраля 2015

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

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

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

Тебе должно быть хорошо идти!

0 голосов
/ 22 января 2015

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

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

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

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

0 голосов
/ 13 декабря 2014

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

enter image description here

0 голосов
/ 17 августа 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...