2014-10-18 93 views
0

我有以下设置:两个类,一个导入另一个,它们都具有碰巧具有相同名称但不同类型的属性。两个类,相同的属性名称,不同的类型 - >被覆盖

当我尝试访问ClazzB的someColor财产,我得到一个错误:

[[[ClazzB sharedInstance] someColor] CGColor] 

错误: 为 'NSString的' 不可见@interface声明选择 'CGColor'

错误清楚地表明它从ClazzA获得财产,问题是为什么?是否有一些奇怪的名字被重写呢?

这里的设置:

@interface ClazzA : NSObject { 
    @private 
    NSString* _someColor; 
} 
@property (nonatomic, copy) NSString* someColor; 

ClazzB进口ClazzA并具有相同名称但不同类型的属性。

#import "ClazzA.h" 

@interface ClazzB : NSObject { 
    UIColor* _someColor; 
} 

@property (nonatomic, strong) UIColor* someColor; 

任何帮助非常感谢!

谢谢!

+0

你可以显示你的“sharedInstance”方法的声明吗? – Vitaly 2014-10-18 00:59:42

+0

这是一个单身人士。 '+(id)sharedInstance {static ClazzB * sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken,^ {sharedMyManager = [[self alloc] init]; }); return sharedMyManager; }' – Stefan 2014-10-18 01:09:09

+0

正如我在下面提到的。不要使用'id'作为这种方法的返回类型。 – Vitaly 2014-10-18 01:10:50

回答

1

在上面,我问你的sharedInstance方法的共享的声明,但是我怀疑它是

+ (id)sharedInstance; 

这是一个问题的原因。在这种情况下,编译器不知道你将得到的确切类型,只是选择someColor的第一个匹配选择器,它返回NSString *

我建议你sharedInstance方法声明中更改到

+ (instancetype)sharedInstance; 

+ (ClazzA *)sharedInstance; 
+ (ClazzB *)sharedInstance; 

我宁愿instancetype方式。

+0

不客气;) – Vitaly 2014-10-18 01:14:48

相关问题