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


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

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

и там было сообщение об ошибке:

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

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

фреймворк WZUIKit является объективным-C и Swift смешанным рамки и WZFoundation-это чистая цель-C.

плюс, все эти sutff работают на любом устройстве или симуляторе.

11 51

11 ответов:

наконец, я решил эту проблему путем добавления $(CONFIGURATION_BUILD_DIR) в настройках сборки цели' и делай Refresh All Views; подождите, пока сборка будет завершена, и ошибки должны исчезнуть

кредит @Mojtaba

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

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

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

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

enter image description here

интересные.

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

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

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

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

который, если я копаюсь в своих файлах xcconfig, кажется, исходит от Cocoapods.

кажется, то же самое, что и Алекс, что @loader_path это ключ, но это немного другой путь на iOS, чем это Mac OS X.

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

когда я использовал "редактор - > отладка выбранных представлений", я увидел, что он разбился, потому что я использовал 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's 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.границы.размер все равно 0 на данный момент! Поэтому я изменил одну строку:

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

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

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

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

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

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

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

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

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

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

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

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

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

Я также испытал это на проекте Mac и Xcode 7.3.1. В моем случае структура, на которую ссылается сообщение об ошибке "не удалось отобразить", вообще не была связана с рисованием.

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

факультативный статус

выполните следующие действия:

  1. Если в раскадровке есть какие-либо конфликты, разрешите их правильно, проверьте правильность проверки xml.(Это основной шаг.)
  2. очистить проект.
  3. удалить папку производных данных.
  4. закройте Xcode и запустить его заново. (Мне пришлось сделать это дважды.)

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

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

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

enter image description here