2014-11-26 2 views
3

В настоящее время я работаю над iOS-приложением, используя Xcode 6.1.1 и Objectiv-C. В приложении есть несколько пользовательских подклассов. Один из них является подклассом UIButton, другой - подклассом UIView. Эти пользовательские виды отмечены как IB_DESIGNABLE и имеют несколько свойств, которые являются IBInspectable. Я также использую Unit Tests в проекте Xcode. Каждый раз, когда я открываю раскадровку, Xcodes дает мне несколько ошибок.IB Designables Ошибка при использовании UnitTests

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. Я нашел сообщение в StackOverflow, у которого есть тот же вопрос, но использует Swift. Предлагаемое решение не работает с использованием Objectiv-C, поэтому функции, используемые для решения проблемы, не существуют (насколько мне известно) в Objective-C. Вот ссылка на вопрос: IBDesignable Errors When Adding to Tests Target

У кого-нибудь есть идея, как это исправить? Я также пробовал использовать Xcode 6.2 beta, но проблема не устранена.

В качестве одного комментария запрошенной, вот код к одному из моих пользовательских просмотров:

CustomButton.h #import

@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 
+0

Проблема будет более понятной, если мы сможем увидеть код. –

+0

Я добавил код к одному из моих пользовательских представлений на вопрос. – naglerrr

ответ

3

У меня тоже была эта проблема. Это было вызвано тем, что файл IB Designable имеет целевое членство как в проекте, так и в тестовых проектах. Как только я удалил его из тестового проекта, очистил и перезапустил Xcode, ошибка исчезла

Смежные вопросы