2014-02-10 34 views
-2

时宣布选择 '方法' 我有下面的代码,为 '类' 无明显@interface调用超

.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'

有关如何使此工作的任何提示?

谢谢!

+1

你几乎可以肯定没有在.h文件中正确地声明你的类和方法,并根据需要将它们包含在.m文件中。 (您不会向我们展示任何@interface声明。) –

回答

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

嗨!输入我的示例代码时发生错误。更新了原来的帖子。 – zundi

+0

@sandy你为什么要在{大括号}中包装实现的内容? –

+0

这是错误的吗?它似乎可以与其他类一起工作。 – zundi

0

如果你有行:

[super MyClass2001]; 

取而代之,你想拥有:

[super myMethod]; 

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

0

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

2.方法声明不能在{}内完成.h。

3.方法定义不能在.m中{}中完成。

4。实现不扩展只有接口被扩展。

如果维持正确的层次结构,它应该可以工作。

相关问题