IBInspectable 属性 在 initWithCoder: initializer 中没有它的值

IBInspectable property doesn't have its value in initWithCoder: initializer

我在 MyClass.h 文件中有这个:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface MyClass : UIView

@end

这是 .m 文件中的代码:

-(void)awakeFromNib{
    [super awakeFromNib];

    NSLog(@"This works %lud",(unsigned long)self.max);
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{

    if ((self = [super initWithCoder:aDecoder])){

        NSLog(@"This doesn't work %lud",(unsigned long)self.max);
    }

    return self;
}

在 awakeFromNib 方法中,我在 IB 中设置了正确的值。在 initWithCoder: 我得到这个值等于零。

为此 属性 检查 IB 中设置的值的适当时间是多少?

这就是我在 .m 文件中定义 属性 的方式:

@interface MyClass()

@property (nonatomic) IBInspectable NSUInteger max;

@end

您似乎已经回答了您自己的问题:awakeFromNib 而不是 initWithCoder:awakeFromNib是后来的,到时候,运行时属性已经设置好了。

当然,在现实生活中,您可能不会关心这个值,直到我们到达 viewDidLoad,这比 两者都要晚得多。