'class'没有可见的@interface在调用super时声明select'方法'

时间:2014-02-10 17:32:00

标签: ios objective-c ios6 xcode4.5

我有以下代码,

.h档案中:

@interface MyBaseClass : NSObject
{
    - (void)myMethod;
}

.m档案中:

@implementation MyClass2000 : MyBaseClass
{
    - (void) myMethod
    {
        //Does something interesting here
        myData[0] = 0;
        myData[1] = 1;
    }
}

后来我创建了一个扩展“MyClass2000”的类,名为“MyClass2001”

.h档案:

#import "MyClass2000.h"

@interface MyClass2001 : MyClass2000
@end

.m档案:

@implementation MyClass2001 : MyClass2000
{
}

这个类与“MyClass2000”完全相同(但我特别需要将它们保存在单独的类中,另一个扩展另一个类。我还需要一个“MyClass2002类”,在这种情况下只需要更新1索引,所以我试着按如下方式调用[super myMethod]

下一课扩展“MyClass2001”

.h档案:

#import "MyClass2001.h"

@interface MyClass2002 : MyClass2001
@end

.m档案:

@implementation MyClass2002 : MyClass2001
{
    - (void) myMethod
    {
        [super myMethod];

        //Only update one value
        myData[1] = 1;
    }
}

在那条线上,我得到了:No visible @interface for 'MyClass2001' declares the selector 'myMethod'

有关如何使其发挥作用的任何提示?

谢谢!

3 个答案:

答案 0 :(得分:3)

这不是您在Objective-C中声明方法的方式。在您的界面中,您声明方法如下:

@interface MyClass2000 : MyBaseClass {
    NSString *someVariableDeclaration;
}

- (void) myMethod;

@end

然后你在你的.m中实现这个功能:

@implementation MyClass2000 {
    NSString * someDifferentVariableDeclaration;
}
 - (void) myMethod
{
    //Does something interesting here
    myData[0] = 0;  
    myData[1] = 1;
}
@end

答案 1 :(得分:0)

你有这条线:

[super MyClass2001];

相反,你想拥有:

[super myMethod];

您试图调用名为MyClass2001的方法,该方法不存在。

答案 2 :(得分:0)

1.Jus检查继承层次结构。在Objc中,必须为每个接口实现。但是你的代码告诉你没有MyBaseClass实现。

2.方法声明不能在.h。

中的{}内完成

3.方法定义不能在.m。

中的{}内完成

4.实现不扩展只扩展接口。

如果保持适当的等级,它应该有效。