4

現在、Xcode 6.1.1 と Objective-C を使用して iOS アプリに取り組んでいます。アプリには、いくつかのカスタム ビュー サブクラスがあります。1 つは UIButton のサブクラスで、もう 1 つは UIView のサブクラスです。

これらのカスタム ビューは IB_DESIGNABLE としてマークされ、IBInspectableであるいくつかのプロパティがあります
Xcode プロジェクトでも単体テストを使用しています。ストーリーボードの Xcode を開くたびに、いくつかのエラーが表示されます。

IB Designables
Failed to update auto layout status: dlopen(UnitTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest 
Referenced from UnitTests.xctest
Reason: image not found

IB Designables 
Failed to render instance of CustomRadioButton: dlopen(UnitTests.xctest, 1): Library not loades: @rpath/XCTest.framework/XCTest 
Referenced from UnitTests.xctest
Reason: image not found

IB_DESIGNABLE ステートメントを削除すると、エラーはなくなります。残念ながら、IB_DESIGNABLE にする必要があります。同じ質問があるが Swift を使用している StackOverflow の投稿を見つけました。提案された解決策は、Objective-C を使用すると機能しないため、問題を解決するために使用される機能は (私が知る限り) Objective-C には存在しません。

質問へのリンクは次のとおりです。テストターゲットに追加するときの IBDesignable エラー

これを修正する方法について誰か考えがありますか?
Xcode 6.2 ベータ版も使用してみましたが、問題は解決しません。

1 つのコメントが要求したように、これが私のカスタム ビューの 1 つのコードです。

CustomButton.h # インポート

@interface CustomButton : UIButton

@property (nonatomic, strong) UIFont *titleFont UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) IBInspectable BOOL useShapedForm;

@property (nonatomic, strong) IBInspectable UIColor *defaultColor;
@property (nonatomic, strong) IBInspectable UIColor *selectedColor;
@property (nonatomic, strong) IBInspectable UIColor *disabledColor;

@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;

- (void)setDefaults;

- (IBAction)touchDown:(id)sender;
- (IBAction)handleButtonClick:(id)sender;

@end

CustomButton.m

#import "CustomButton.h"

@implementation CustomButton

#pragma mark - Initialisation

- (instancetype)init
{
    if (self = [super init]) {
        [self setDefaults];
    }
    return self;
}


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


- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        [self setDefaults];
    }
    return self;
}


- (void)setDefaults
{
    self.useShapedForm = NO;

    self.cornerRadius = self.useShapedForm ? 5 : 0;

    self.defaultColor = self.useShapedForm ? [UIColor rsm_bg_btn_2] : [UIColor clearColor];
    self.selectedColor = self.useShapedForm ? [UIColor rsm_bg_btn_1] : [UIColor clearColor];
    self.disabledColor = self.useShapedForm ? [UIColor rsm_bg_btn_3] : [UIColor clearColor];

    if (!self.useShapedForm) {
        [self setTitleColor:[UIColor rsm_font_333_dark] forState:UIControlStateNormal];
        [self setTitleColor:[UIColor rsm_bg_red] forState:UIControlStateSelected];
        [self setTitleColor:[UIColor rsm_font_333_light] forState:UIControlStateDisabled];
    } else{
        [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    }
}


#pragma mark - Properties

- (void)setTitleFont:(UIFont *)titleFont
{
    if (self.titleFont != titleFont) {
        self.titleFont = titleFont;
        [self.titleLabel setFont:self.titleFont];
    }
}

- (void)setTitleEdgeInsets:(UIEdgeInsets)titleEdgeInsets
{
    UIEdgeInsets insets = UIEdgeInsetsMake(titleEdgeInsets.top - 10,
                                           titleEdgeInsets.left,
                                           titleEdgeInsets.bottom,
                                           titleEdgeInsets.right);
    [super setTitleEdgeInsets:insets];
}

- (CGSize)intrinsicContentSize
{
    CGSize defaultMetric = [super intrinsicContentSize];
    // TODO: Metrics anpassen!!
    return CGSizeMake(defaultMetric.width, 39);
}


#pragma mark - Private Methods

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    if (self.useShapedForm) {
        [self drawRSMShape];
    }
}


#pragma mark - Public Methods

- (void)drawRSMShape
{
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                               byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight | UIRectCornerBottomLeft
                                                     cornerRadii:CGSizeMake(self.cornerRadius, self.cornerRadius)];
    [path closePath];

    if (self.selected) {
        [self.selectedColor setFill];
    }
    else if (self.enabled){
        [self.defaultColor setFill];
    }
    else {
        [self.disabledColor setFill];
    }

    [path fill];
}


- (IBAction)touchDown:(id)sender
{
    RSMButton *button = (RSMButton *)sender;
    button.highlighted = NO;
}


- (IBAction)handleButtonClick:(id)sender
{

}

@end
4

1 に答える 1

3

私もこの問題を抱えていました。これは、プロジェクト プロジェクトとテスト プロジェクトの両方にターゲット メンバーシップを持つ IB Designable ファイルが原因でした。テスト プロジェクトから削除し、Xcode をクリーンアップして再起動すると、エラーはなくなりました。

于 2015-07-15T18:02:52.553 に答える