2014-02-10 44 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。實現不擴展只有接口被擴展。

如果維持正確的層次結構,它應該可以工作。

相關問題