IB_DESIGNABLE не отображается в Интерфейсном Разработчике

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

Main.storyboard: warning: IB Designables: Ignoring user defined runtime attribute for key path "icon" on instance of "UIView". Hit an exception when attempting to set its value: [<UIView 0x7fc33a5601c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key icon.

Я загружаю файл .xib и переопределяю методы initWithCoder и initWithFrame следующим образом:

- (void) loadView {
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    UIView *view = [[bundle loadNibNamed:@"TheNameOfTheNIB" owner:self options:nil] firstObject];
    [self addSubview:view];
    view.frame = self.bounds;
    view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [iconButtton setImage:_icon forState:UIControlStateNormal|UIControlStateSelected];
}

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self && self.subviews.count == 0) {
        [self loadView];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self loadView];
    }
    return self;
}

В initWithCoder: мне пришлось использовать проверку наличия подпредставления, потому что оно входило в бесконечный цикл (xib-файл в loadView снова вызывает initWithCoder:.

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

Обновить

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

#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomComponent : UIView

@property (assign, nonatomic) IBInspectable UIImage *icon;

@property (weak, nonatomic) IBOutlet UIButton *iconButtton;

@end

person zbrox    schedule 16.09.2015    source источник
comment
Можем ли мы увидеть части вашего кода, где вы добавляете атрибуты IB_DESIGNABLE и IBInspectable?   -  person Matt Gibson    schedule 16.09.2015
comment
@MattGibson Я сделаю это прямо сейчас   -  person zbrox    schedule 16.09.2015
comment
Вам могут помочь на nshipster.com/ibinspectable-ibdesignable.   -  person AMayes    schedule 17.09.2015
comment
Это касается только стандартных вещей о IB_DESIGNABLE, ничего особенного об этой конкретной проблеме. Описанный там способ отладки тоже ничего не дает.   -  person zbrox    schedule 17.09.2015
comment
Можете ли вы попробовать сделать это в методе layoutSunbview.   -  person Mike.R    schedule 18.09.2015
comment
@Mike.R Я предполагаю, что вы хотите поместить [self loadView] в viewDidLayoutSubviews. Я попробовал это сейчас и не дал других результатов.   -  person zbrox    schedule 21.09.2015
comment
@zbrox Я имею в виду, попробуйте внести свои изменения в layoutSunbview (я думаю, вам не следует напрямую вызывать [self loadView], stackoverflow.com/questions/8876212/), также попробуйте сделать что-нибудь простое как изменить цвет фона для начала. (Что нового в Interface Builder WWDC2014, они объясняют, как это сделать).   -  person Mike.R    schedule 21.09.2015