Я недавно обновился до Xcode 8, и у меня возникли проблемы с раскадровкой.

Если я открою проект и у меня не будет открытой раскадровки, он скомпилируется и запустится нормально. Как только я открываю раскадровку, я получаю несколько ошибок в IB Designables, как показано ниже.

enter image description here

Эти представления - единственные, которые используют пользовательские представления из TextFieldEffects и BEMCheckbox, которые я импортировал с помощью Cocoapods.

Alan

Ответов: 23

Ответы (23)

Вы можете попробовать одно из следующих действий, чтобы выяснить причину:

  1. найдите журналы IBDesignablesAgentCocoaTouch в этом каталоге: ~ / Library / Logs / DiagnosticReports и посмотрите причину.

Примечание: для пользователей Catalina: ищите IBDesignablesAgent-iOS_ <ДАТА> - .crash

  1. Перейдите в Редактор -> Отладка выбранного вида при выборе @ IBDesignable UIView в раскадровке и просмотрите трассировку стека.

  2. Удалить папку с производными данными.

    Предпочтение Xcode -> Местоположение -> Производные данные
    / Пользователи / YourMacName / Библиотека / Разработчик / Xcode / DerivedData
    
  3. Очистите свой проект Shift + Команда + Alt + К.

  4. Создайте свой проект Команда + B.

Я просто удаляю представление, которое не удалось, и нажимаю command + Z, чтобы отменить удаление. У меня работает.

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

Я решил проблему следующим образом:

  1. Перейдите в Файл> Настройки рабочего пространства.
  2. Щелкните маленькую стрелку вправо рядом с «Производные данные». Откроется приложение Finder в папке DerivedData.
  3. Зайдите в папку DerivedData и удалите папку, соответствующую вашему проекту.
  4. Закройте Xcode и снова откройте его.
  5. Очистите ваш проект shiftкомандаk.
  6. построить свой проект командаb.
  7. Откройте раскадровку.
  8. Перейдите в Редактор> Обновить все представления.

Обновлено

Иногда просто перейдите в Редактор> Обновить все представления сработало. Если Обновить все представления отключен, выйдите из Xcode и повторите попытку.

Я пробовал очистить и запустить проект, это не решит проблему.

Но Закрыть и снова открыть проект сделал.

Если вы используете xib-файл для пользовательского uiview. Попробуйте это:

Изменить с

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

Кому:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)

Для тех, кто, как и я, не может найти этот IBDesignablesAgentCocoaTouch файл или при попытке «Отладка выбранных представлений» из редактора выдает ошибку, вот еще один способ отладки тех, что «Не удалось визуализировать» ошибки.

Откройте приложение «Консоль», на боковой панели выберите свой текущий Mac (вероятно, он будет выбран автоматически по умолчанию), а затем в строке поиска найдите «IBSceneUpdate» и нажмите Enter.

Таким образом, каждый раз, когда вы получаете ошибку Xcode для IBDesignable, неспособного отобразить, вы также получите новую запись «IBSceneUpdate» с более подробной информацией об ошибке.

По крайней мере, так я смог отладить свои IBDesignable ошибки!

Console app showing IBSceneUpdate errors

Для меня это самый простой способ: добавить этот скрипт в свой Podfile

Подфайл:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if target.product_type == "com.apple.product-type.bundle"
    target.build_configurations.each do |config|
      config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
    end
  end
end

Источник:

Этот обходной путь для @IBDesignable можно найти здесь: https://github.com/CocoaPods/CocoaPods/issues/5334

Моя проблема была решена удалением папок (связанных с этим проектом) из папки производных данных. вы можете сделать это, щелкнув File -> Project Setting -> затем щелкните значок стрелки deside /Users/.../Xcode/DerivedData щелкните папку DerivedData, вы увидите, что ваш проект с именем папки удаляет их. выйдите из xcode, откройте свой проект, очистите проект, используя этот шаг Product-> clean затем соберите проект: Product-> Build Это решит эту проблему.

Моя первая попытка выйти из Xcode, и перезапуск помог. Так что это простое и быстрое исправление вместо некоторой работы, -)

После того, как вы внесете необходимые изменения, измените раскадровку или, в моем случае .xib, чтобы открыть в «XCode 7», сохраните и закройте. Это просто временная мера для устранения ошибок, но в конечном итоге вам нужно будет исправить их или делать это до тех пор, пока вы больше не сможете это сделать.

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

Добавление следующего кода в мой класс @ IBDesignable помогло.

override init(frame: CGRect) {
    super.init(frame: frame)
}

Просто откройте раскадровку -> Редактор -> Обновить все представления. Эта работа для меня.

Для меня это было из-за неправильного имени шрифта в раскадровке. Исправление названия шрифта устранило проблему.

Отмена приведенного ниже изменения устранила проблему. InCorrectFont

В моем случае я использовал библиотеку, которая создавала подклассы UIView. Он использовал IB_DESIGNABLEи отсутствовал вызов [super awakeFromNib]. Как только я добавил вызов этого метода, ошибка исчезла.

Я не уверен, повлиял ли на это тот факт, что он реализовывал IB_DESIGNABLE.

Обнаружена такая же ошибка: Если настроить UITextField и использовать построитель интерфейса, ошибка в консоли была -Использование нереализованного инициализатора init (frame :) для класса CustomField

Добавлен инициализатор для исправления ошибки

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

enter image description here

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

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

@IBDesignable class RoundedView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    sharedInit()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

ВАЖНО: не забудьте добавить новый класс к элементу, на котором вы используете дизайн.

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

Итак, вам нужно найти IBDesignablesAgent-iOS_ [Date] _ [YourMac] .crash в ~ / Library / Logs / DiagnosticReports в этом месте, и вы узнаете причину сбой с уважаемым путем к файлу.

Теперь надо проверить уважаемый файл.

Когда я отлаживал это, я обнаружил, что есть классы, которые изменяют UI. Обычно marquelabel является подклассом UILabel или любого другого класса, подклассом UIView и отрисовывающего пользовательский интерфейс во время выполнения и сталкивающегося с механизмом Autolayout. Попробуйте указать фиксированную ширину или высоту для этих настраиваемых представлений. Если это не решит вашу проблему, попробуйте следующие решения: -

Решение 1. - Раскомментируйте #use_frameworks внутри вашего pod-файла.

Решение 2: - Попробуйте удалить производные данные

  1. Закройте окно редактора вашего Xcode и выйдите из симулятора ->
  2. Перейдите в Настройки Xcode -> Местоположения ->
  3. Щелкните маленькую серую стрелку, показывающую путь к производным данным ->
  4. Выберите свой проект ->
  5. Удалить все папки внутри ->
  6. Закройте Xcode и снова откройте

Я столкнулся с этой проблемой в CocoaPod 1.5.0. Решением является повторная переустановка модуля (повторная установка модуля) после появления этой ошибки или вместо этого вы можете использовать CocoaPod 1.4.0. Он отлично работает в 1.4.0 (по крайней мере, у меня)

обновление:

Добавьте следующий скрипт в Podfile, чтобы помочь мне решить проблему в 1.5.0

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings.delete('CODE_SIGNING_ALLOWED')
    config.build_settings.delete('CODE_SIGNING_REQUIRED')
  end
end

ссылка: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

Попробуйте отключить «Использовать вариации характеристик» (панель «Идентификация и тип») для любого файла xib, который может быть у вас для пользовательских представлений, используемых в вашей раскадровке.

Правильный ответ предоставила @ Maria:

проверьте отчет о сбое в ~ / Library / Logs / DiagnosticReports

Альтернативный способ:

  1. открыть Spotlight

enter image description here

  1. тип console.app

enter image description here

  1. выберите Отчеты о сбоях

enter image description here

  1. выберите один для IBDesignablesAgent-iOS и просмотрите журнал сбоев

2022 WebDevInsider