我最近正在开发一款iphone应用程序,我觉得使用继承使结构更有意义和优雅。但是,我正在努力研究继承如何在objc中工作。 Java中的继承约定似乎不起作用。
情形:
这可能有点复杂,但这看起来是描述情况的最佳方式。假设我有两个类,A和B.它们看起来如下:
// Class A
@interface A: B
@end
@implementation A
- (id)init{
self = [super init];
if(self){
}
return self;
}
@end
// Class B
@interface B: NSObject
@property A *littleA;
- (void)doSomething;
- (void)blabla;
@end
@implementation B
- (id) init {
self = [super init];
if(self) {
_littlea = [[A alloc] init]; // error: No known class method for selector 'alloc'
}
return self;
}
- (void)doSomething{
NSLog(@"something");
}
- (void)blabla{
[littleA doSomething]; // error: No visible @interface for 'A' declares the selector 'doSomething:'
}
@end
除了这些类之外,还有一个C类。在B类中,我将'littleA'传递给了C类的方法。在那种方法中,我做了:
[littleA isEqual:NULL];// error: No visible @interface for 'A' declares the selector
我对这些错误消息完全感到困惑。这是继承假设要做的吗?在Java中,A扩展B,B扩展C,然后我可以从A:a.b的方法或a.c的方法调用。
我做错了什么?任何人都可以解释这三个错误信息将是一个很大的帮助!
答案 0 :(得分:-1)
在类B
中,您的属性声明littleA
缺少星号(在Objective-C中表示该变量是一个对象)。
@property A *littleA;
我认为这将清除您发布的错误。