Подтвердить что ты не робот

Не удалось отобразить экземпляр IB Designables

У меня смешанная динамическая структура Objective-C и Swift. И смешанная структура была связана с двумя чистыми динамическими структурами Objective-C.

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

И появилось сообщение об ошибке:

IB Designables: Не удалось отобразить экземпляр WZUITokenField: dlopen (WZUIKit.framework, 1): библиотека не загружена:/Library/Frameworks/WZFoundation.framework/WZFoundation   Ссылка на: WZUIKit.framework   Причина: изображение не найдено

IB Designables: не удалось обновить статус автоматического макета: dlopen (WZUIKit.framework, 1): библиотека не загружена: @rpath/WZFoundation.framework/WZFoundation   Ссылка на: WZUIKit.framework   Причина: изображение не найдено

Структура WZUIKit представляет собой смешанную структуру Objective-C и Swift, а WZFoundation является чистой Objective-C.

Кроме того, все эти функции sutff работают на любом устройстве или симуляторе.

4b9b3361

Ответ 1

Наконец, я решил эту проблему, добавив $(CONFIGURATION_BUILD_DIR) в поле настройки целевой сборки Runpath Search Paths.

Кроме того, есть несколько дополнительных шагов, которые вам могут понадобиться для вашего Xcode.

  • Очистить производные данные Xcode для проекта. Они находятся в ~/Library/Developer/Xcode/DerivedData
  • Очистите текущую сборку, нажав K
  • Создайте свой проект
  • В раскадровке перейдите в меню Editor и сделайте Refresh All Views; дождитесь завершения сборки и ошибок не должно быть.

Кредит @Mojtaba

Ответ 2

Если у вас есть одна и та же проблема с созданием приложения Mac, добавление @loader_path/../Frameworks в Runpath Search Paths разрешило это для меня.

Ответ 3

для меня он работает, чтобы закрыть xcode и снова открыть его снова. После ошибки нет. Спасибо.

Ответ 4

Интересно.

Во-первых, ответ WeZZard заставил меня идти в правильном направлении, но не был моим решением.

В моем проекте iOS что-то переопределило поле Runpath Search Paths в моей цели. Это выглядело так:

LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";

Я попробовал его решение добавить $(CONFIGURATION_BUILD_DIR), но это не сработало для меня. Поскольку он не работал, по привычке я просто удалил запись конфигурации (вернувшись к значениям по умолчанию проекта). Когда я это сделал, reset:

LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

который, если я вхожу в мои файлы xcconfig, появляется из Cocoapods.

Кажется, что Alex имеет значение @loader_path, но это немного отличается от iOS, чем Mac OS X.

Ответ 5

Я столкнулся с этой ошибкой на платформе, содержащей IBDesignables.

Мне пришлось добавить $(FRAMEWORK_SEARCH_PATHS) LD_RUNPATH_SEARCH_PATHS $(FRAMEWORK_SEARCH_PATHS) к параметру LD_RUNPATH_SEARCH_PATHS в моей целевой структуре.

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

enter image description here

Ответ 6

У меня была такая же проблема. В Xcode 6.4 добавление тестового членства в раскадровку фиксировало эти ошибки для меня.

Также моя тестовая цель @loader_path/Frameworks установлена ​​в Runpath Search Paths для целевой цели, а не в исходной цели.

enter image description here

Ответ 7

Я только что выяснил еще одну причину в моем случае:

Когда я использовал "Редактор → Отладка выбранных представлений", я увидел, что он разбился, потому что я использовал CoreGraphics для создания изображения и использовал его в качестве фонового изображения для кнопки:

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {

    let rect = CGRectMake(0.0, 0.0, size.width, size.height);
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0);
    let context = UIGraphicsGetCurrentContext();    // It alraedy nil here :(

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}

Причина в том, что размер равен (0.0, 0.0). Почему это? Я звоню

super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)

Но в IB self.bounds.size все равно 0 в этой точке! Поэтому я изменил одну строку:

let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));

И теперь он работает:)

Apple должна предоставить список с Dos и Don'ts относительно IB...

Ответ 8

Я также испытал это на проекте Mac и Xcode 7.3.1. В моем случае, фреймворк, указанный в сообщении об ошибке Failed to Render, вообще не был связан с рисованием.

Просто перейдя на целевую вкладку Общие/Связанные фреймворки и библиотеки и изменив статус нарушающей фреймворк с Обязательный на Необязательный, IBDesignables может корректно обновляться и рисовать в IB.

optional status

Ответ 9

В моем случае я делал следующее в методах initWithFrame/initWithCoder для создания представления:

className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

Но похоже, что я не должен был использовать Main Bundle, но пакет этого класса. Поэтому я заменил этот код следующим и работал:

bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];

Я подумал, может быть, это может помочь кому-то.

Ответ 10

У меня была эта проблема в проекте OS X.

В моем случае проблема была старым проектом (NMSSH), содержащим цель рамки с плохими настройками сборки. В частности:

  • INSTALL_PATH установлено значение @executable_path/../Frameworks, но правильный параметр /Library/Frameworks
  • SKIP_INSTALL не был установлен и по умолчанию используется NO, но правильный параметр YES
  • DYLIB_INSTALL_NAME_BASE не был установлен, но правильная настройка @rpath

Обратите внимание, что все правильные настройки - это то, что вы получаете автоматически для вновь созданной целевой среды.

После изменения настроек на правильные значения Xcode смог загрузить мой просмотр @IBDesignable в раскадровке.

Ответ 11

Выполните следующие шаги:

  • Если в раскадровке есть какие-либо конфликты, разрешите их правильно, проверьте правильность проверки XML-кода (это основной шаг.)
  • Очистите проект.
  • Удалить папку с производными данными.
  • Закройте Xcode и перезапустите его снова. (Я должен был сделать это дважды.)

Ответ 12

У меня была аналогичная ошибка, которая была вызвана моими представлениями Framework, не имеющими публичных инициализаторов:

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

required public init(coder: NSCoder) {
    super.init(coder: coder)
    commonInit()
}

Ответ 13

Очистить производные данные. Выйдите из Xcode, снова откройте.

Ответ 14

В моем случае это внутри частного стручка. Xcode версии 10.3 (10G8) produce rendering error

Оговорка в моем случае очень проста - я просто забываю добавить public между @IBInspectable var

правильный вариант:

import UIKit

@IBDesignable public class BorderedView: UIView {
    @IBInspectable public var borderColor: UIColor? = UIColor.white {
        didSet {
            if let actualColor = borderColor {
                layer.borderColor = actualColor.cgColor
            } else {
                layer.borderColor = UIColor.white.cgColor
            }

            setNeedsDisplay()
        }
    }
    @IBInspectable public var borderWidth: CGFloat = 1 {
        didSet {
            layer.borderWidth = borderWidth
            setNeedsDisplay()
        }
    }
}

Редактор P.S.: → Отладка выбранных представлений в моем случае ничего не сделала

P.S.2: модуль AlignedCollectionViewFlowLayout из зависимости от моего частного модуля и определенно не имеет отношения к этой проблеме.

P.S.3: проблема все еще здесь