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


84

Я намагаюся створити перо, яке містить вигляд, який буде вбудований у TableViewCell. Я створив інтерфейс і файли реалізації, ResultCell.hі ResultCell.m. Вони на складі, готові, коду не змінюються.

Потім я створюю порожній файл XIB і перетягую на нього UIView. Потім я натискаю Власник файлу та встановлюю тип ResultCell. Я натискаю подання та встановлюю його клас також ResultCell.

Ось проблеми, які я маю:

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

Я спробував створити та заново створити вигляд, і він просто не працює, і я почав втрачати терпіння. Будь-яка допомога буде дуже, дуже вдячна!


Я просто натрапив на це сам. Вчора ввечері це спрацювало, а сьогодні нічого. Повідомлю вас, якщо щось знайду.
Тавісон,

На протокол, кілька відповідей тут допомогли мені протягом останнього року. Останні версії Xcode покращили ситуацію.
Тім Салліван

Відповіді:


82

Це може не спрацювати для вашої конкретної проблеми, але іноді я отримую таку помилку під час роботи з нещодавно створеними наконечниками. Видалення та відтворення піктограм і контролерів перегляду з тими ж іменами, що і раніше, не вирішило проблему, але перезапуск Xcode зробив це.


+1 Працював і у мене. Просто перезапустіть XCode, і тепер я можу CTRL + перетягувати, щоб створити нові @propertys у своєму .h файлі.
Mike Gledhill

1
Відповідь Девіда Пізоні спрацювала на мене. Просто перезапуск Xcode не вирізав гірчицю.
Енді,

Зараз у мене не виникало цієї проблеми у багатьох випусках Xcode, тому, мабуть, є інша причина, яка зараз є більш поширеною, ніж та, з якою я стикався, коли писав цю відповідь минулого року.
Зіпсований

@Defragged, чи можете ви також включити крок очищення кешу, натиснувши Command K перед цитуванням, або навіть краще закрити Xcode, а потім очистити кеш ( ~/Library/Developer/Xcode/DerivedData)
user1046037

Я працюю зі студією Xamarin. Мені довелося залишити xcode і xamarin studio, а потім знову відкрити Xamamrin Studio і відкрити тут файл xib, який запускався в xcode. Потім помічник редактора відкрився правильно.
Dave Haigh

113

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

Закриття проекту та повторне відкриття не виправили його.
Вихід з XCode і перезапуск не виправили це.
Створення нового проекту та тестування функціональних можливостей працювали нормально, що привело мене до думки, що десь у кеші є щось пошкоджене.

Моє рішення

  • Закрийте свій проект.
  • Перейдіть до папки ~ / Library / Developer / XCode / DerivedData та ВИДАЛІТЬ усі вкладені папки, що посилаються на проект, над яким ви працюєте.
  • Відкрийте свій проект у XCode. Проблему слід вирішити зараз.

До речі, здавалося б, просто провести повну чистку, здавалося б, не зрозуміло. Мені довелося смітити похідні дані. Я впевнений, що потрапив у цю позицію через git-ігри, в які я грав, але я не уявляв, як вибратися, оскільки навіть повернення до попередніх версій git не допомогло. (Це також було великою підказкою, що це щось не відстежується самим проектом.)


6
Я щойно увійшов у SO на своєму Mac, щоб я міг підтримати цю відповідь! Повністю працював у мене. Це зводило мене з розуму, оскільки я тільки вчусь користуватися XCode, і це вже досить важко без таких смішних проблем. :) Дякую!!!
Дейв,

2
він навіть працює без перезапуску xcode; тільки видалення отриманих даних і відновлення (за проектом IOS)
шишка

Це спрацювало, коли перезапуск xcode не зробив. Я не уявляю, як це сталося за методом Девіда Пізоні, що спрацювало чудово.
mmopy

Приголомшливо Звідки ти це знав? Працював у мене.
Хол

1
хай добре знати, що IOS і xcode можуть бути такими ж глючними, якщо не більше, ніж використання eclipse та Android: p
James andresakis,

14

Я просто мав цю проблему, і перезапуск Xcode не вирішив її. Я видалив файли класів з проекту, потім додав їх назад, і він почав працювати.


13

У мене була така сама проблема. І я спробував:

  • Перезапуск Xcode
  • Видалення похідних даних
  • І багато іншого

Нічого з цього не спрацювало. Мені вдалося просто:

  • Видаліть із класу файли класу "підозрілі" (просто видаліть посилання, так?)
  • Повторно додайте їх до проекту

І готово!


2
Це спрацювало для мене, дякую! Це було перше, що я спробував, крім перезапуску XCode, оскільки здавалося, що це найменший обсяг роботи та ризиків, і він спрацював чудово.
adriandz

1
працював для мене після перезавантаження Xcode і видалення отриманих даних в штрафний
ELAD сек

1
Цей зробив трюк і для мене. Це може мати щось спільне з рефакторингом імен класів (що я щойно робив раніше).
ecotax

9

Якщо перезапуск Xcode у вас не працює, я виявив, що відключення та повернення нового файлу .m до цільового членства працює.


3

Це мені допомогло:

  1. на панелі файлу проекту (ліва сторона) виберіть файл xib, який порушено.
  2. Клацніть на піктограму власника файлів у вікні редактора.
  3. на панелі властивостей (справа) виберіть третю вкладку (вгорі)
  4. вкажіть "Спеціальний клас"

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


Нещодавно я змінив (рефакторував) назву класу. Спеціальний клас, згаданий у цій відповіді, все ще був встановлений на стару назву. Змінив його на нову назву, і це виправлено.
PaulMrG

2

Я помітив, що файл .m переміщено до папки en.lproj.

Просто видаліть (лише посилання) файл .m із Xcode і перемістіть .m з en.lproj. Додайте його ще раз, і це вирішить проблему.

Не хвилюйтеся, ви повернете всі свої зв’язки.


Мій .m був автоматично згенерований, і я ще не змінював його. Я зробив, і все було нормально. Більше нічого не спрацювало.
entonio

2

Я зіткнувся з такою ж проблемою сьогодні. Перезапуск XCode не вирішив проблему для мене. Я був в змозі отримати речі в нормальний стан за допомогою «Видалити» варіант «Derived даних» від проекту , який можна знайти під Організатора . Організатор каже, що "Похідні дані включають індекс, вихідний файл збірки та журнали". Я думаю, що причиною цієї проблеми був або індекс, або вихід збірки .


2

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


2

У моєму випадку це допомогло внести "фальшиві зміни" (просто пробіл) у відповідний файл заголовка.


Я думаю, це, можливо, зробило це для мене теж. У моєму випадку я додав розетку вручну. Потім я зміг підключити до нього свою локшину, а також створити нові торгові точки за допомогою ctrl-перетягування.
Даніель Вуд,

1
  1. ResultCell має бути підкласом UITableViewCell
  2. Не слід перетягувати a UIViewна порожнє полотно, слід перетягувати aUITableViewCell
  3. Вам слід вибрати клітинку та змінити її на свій підклас
  4. Власник найчастіше є контролером з виходом до клітини

Щоразу, коли ви хочете завантажити нову комірку, телефонуйте:

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

після завантаження використовуйте комірку та встановіть ivar / вихід на нуль, готовий до наступного завантаження

є й інші шляхи, але це звично


Якщо я це роблю, у мене точно така ж проблема. Помічник редактора не відображає .h, коли я переглядаю перо, і ctrl + перетягування не створює код розетки, він відображає помилку.
Тім Салліван,

2
Чи використовуєте ви 4.0.2 Xcode? Ви можете вручну встановити помічника редактора, якщо він не працює належним чином. Я припускаю, що ви перезапустили програму, щоб перевірити цю проблему (Xcode 4 часто від цього виграє). Здається, він не може знайти файли класів у проекті, або щось неправильно названо - великі літери важливі. Наразі проект будується? Це дуже високий рівень функціональності, який залежить від нової технології компілятора.
bshirley

Ой, ефф. Так, перезапустивши Xcode, і він відразу ж запрацював. - Вибачте, я зараз упаду на меч.
Тім Салліван

1

Можливо, у мене спрацювало це .. (Xcode v4.5)

Це не спрацювало

Я намагався контролювати перетягування у визначення інтерфейсу мого .h

@interface SearchViewController : UIViewController

@end

Це спрацювало (можливо, саме так воно мало працювати, я раніше цього не знав) Див. Відкриті та закриті дужки. Керуйте перетягуванням після закритої дужки.

@interface SearchViewController : UIViewController
{
}

@end

1

У мене була подібна проблема з проектом, написаним Swift.

У мене спрацювало налаштування IBOutlet у такому коді

@IBOutlet var foo: UIView?

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


Це ЄДИНИЙ спосіб мені вдалося змусити це працювати і для мене. Я дотримувався навчального посібника Apple, написаного для Objective-C (Почати розробку програм для iOS вже сьогодні), і мені потрібно було підключити текстове поле New To-To Item. Нарешті я створив @IBOutlet var textField: UITextField? і підключений до цього, і це спрацювало. Використання XCode 6.4
andrewz

1

Жодне з вищезазначених обхідних шляхів не вирішило проблему з роз’ємом для мене, тому я відклав свій домашній проект, поки не натрапив на такий потік stackoverflow:

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

Я працював над великим проектом у попередній версії XCode і вимкнув індексацію. Повторно ввімкнувши індексацію, моя проблема тепер виправлена:

defaults delete com.apple.dt.XCode IDEIndexDisable

Тепер я можу використовувати функції розробки та розробки Interface Builder. Сподіваюсь, це може допомогти іншим ...


1

Здається, ця проблема полягає у помилці Xcode, яка виповзає здебільшого, коли ви замінюєте файл новим файлом з такою ж назвою. Здається, Xcode зберігає посилання на старий однойменний файл.

У будь-якому випадку, спосіб виправити це, здається, такий:

  1. Очистіть проект
  2. Клацніть (Your Project) у поданні Navigator Project. Перейдіть до Компілювати джерела в розділі Фази побудови цілі, для якої ви будуєте. Видаліть і додайте назад файл .m, який доставляє вам проблеми.
  3. Крім того, у інспекторі файлів (подання службових програм) файлу NIB у розділі Цільове членство зніміть прапорець і перевірте ім’я цілі.
  4. Перезапустіть Xcode для гарного вимірювання.
  5. Звичайно, видалення та додавання назад лише файлу .m також повинно це виправити.

(Лише кроки 1 та 2 це виправили для мене.)


0

Якщо ви скопіювали файли з іншого проекту, просто переконайтеся, що встановили прапорець "Додати до цілей"


0

Перейменування файлів класів може від’єднати їх від XIB. Ця відповідь допомогла мені це зрозуміти:

Ctrl-Перетягування від кнопки до методу не працює. Конструктор Xcode / Interface

Переконайтеся, що ваш власний клас правильно встановлений в засобі перевірки особистості.


0

Подібний симптом, але інша причина.

Очевидно, я вдарився назад, коли фокус був на поданні помічника, оскільки один зі стандартних рядків коментарів шаблону файлу перейшов з // в /, що призводить до того, що файл не компілюється.

Виправлення коментаря дозволило SDK проаналізувати файл, розпізнати його як UIViewController та додати в розетку.

ТАК - якщо у вас є ця проблема, виконайте збірку або аналіз, щоб перевірити, чи є помилки, які потрібно виправити у файлі .h контролера перегляду. ПОТІМ спробуйте інші рішення.


0

Це може бути стара тема, але лише на випадок, якщо хтось матиме таку ж проблему в майбутньому, спробуйте видалити пов'язані файли .xib, .h та .m та створіть нові. Для мене UIViewController у моєму файлі .h не був фіолетовим, і навіть зворотний простір та введення тексту не допомагали.


0

Просто поставте межу між @implementation та @synthesize. Більшість відповідей тут мають це спільне. У мене це спрацювало

@implementation 

@synthesize

0

Я просто спробував тут усе, і нічого не вдалося (використовуючи попередній перегляд розробника для Xcode 5).

Єдине, що мені вдалося, це вставити цей неповний рядок у файл інтерфейсу:

@property (nonatomic, weak)

З будь-якої причини, додавання розеток та дій шляхом перетягування з .xib працювало нормально після цього.


0

Для мене проблема очищення чи видалення DerivedData вирішена.

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

Потім я відтворив клас UIViewController і дав йому іншу назву. Це вирішило проблему для мене.


0

Я мав цю проблему і знайшов рішення, не зазначене вище.

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

у моєму випадку, і, можливо, вашому, мені потрібно було додати клас до випадаючого цілей / фаз побудови / компіляції джерел. Потрібно додати .m. Всі інші .m були там, але не цей.

Як тільки я додав його,: UIViewController з'явився у фіолетовому кольорі, і все працювало нормально.


0

У моєму випадку у мене є кілька проектів з деякими іншими залежностями. Я намагався вирішити це шляхом видалення похідних даних або перезапуску XCode, але це не могло спрацювати. Врешті-решт, я спробував такий спосіб, і він працює:

Перейдіть до target> Build Target Architectures Only> та встановіть для Debug і Release значення NO.

Встановіть це для всіх проектів у робочій області та перекомпілюйте, щоб переконатися у відсутності інших помилок. Можливо, не маючи сенсу, але якимось чином це зробив. Під час моєї компіляції у мене були інші проблеми, такі як помилки компонувальника та символи, не знайдені.


0

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

введіть тут опис зображення


0

Використовуючи Swift, у мене була подібна проблема. Я з’ясував, що коментарі для мене були частиною проблеми.

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

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

Цікаво, чи сталося те, що Indexer читав коментарі, а також назви класів, і якось заплутався.


0

Сподіваюся, це допомагає комусь там.

Мені просто довелося видалити похідну папку даних. Потрібно натиснути Вікно -> Органайзер -> Проекти -> Видалити похідні дані

І ПЕРЕЗАПУСКАЙТЕ XCODE.

Вам повинно бути добре їхати!


0

Новий клас, який не є частиною "ЦІЛІ", ймовірно, є основною причиною цього, на що натякають деякі з цих відповідей.

При створенні нового класу какао за замовчуванням опція додавання нового класу до цільового за замовчуванням перевіряється, але якщо з будь-якої причини це не перевірятиметься при натисканні кнопки "Зберегти", у вас буде ця проблема.

Ціль нового класу

Будь-яке з цих обхідних шляхів, які додають новий клас до цільової програми, буде працювати для вирішення проблеми і є спільним для всіх цих «виправлень».

Я думаю, що XCode, ймовірно, має деякі помилки, через які новий файл за замовчуванням НЕ додається до основної цілі програм. Виправлення зводиться до додавання вашого "зламаного" класу до основної ЦЕЛІ


0

У XCode 7.1 додавання з'єднувача в іншій точці мого вихідного файлу спрацювало. Помилка, про яку я отримував посилання на одну зі своїх змінних, ніби це клас (не мала сенсу). Помилка перестала виникати, коли я додав сполучник нижче цієї змінної замість неї.


0

Існує також інша причина цієї проблеми ... якщо ви створили новий файл класу какао із шаблоном, відмінним від ios ..., це може статися ...

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.