2012-11-04 52 views
0

我將其中一個實例方法更改爲一個類方法,以便可以從另一個類訪問它。該方法調用成功,但我有我的代碼,一個警告:類方法的不完整實現 - 缺少什麼?

  • 完全執行(就行了「@implementation myViewController」)

我的類代碼如下所示:

//... 

@implementation myViewController 

#pragma mark - myMethod 
+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text 
{ 
    //... 
} 

//... 

在我的類的頭文件,我有以下幾點:

#import "CustomUIView.h" 

//... 

@interface myViewController : CustomUIViewController <CustomUIViewDelegate> 
{ 
    //... 
} 

//... 

@end 

我想我必須在頭文件的錯誤部分聲明方法,可能是由於子句?或者我完全錯過了其他的東西。我在網上看了一眼,並且as far as I can tell I'm following protocol;也許這有一些特殊的設置?

編輯:這是我的協議從我CustomUIView頭文件:

@class CustomUIView; 

@protocol CustomUIViewDelegate <NSObject> 

+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text; 
//... 
@end 
+0

你的協議在哪裏? –

+0

TSAlertView的實現在哪裏? –

+0

@HotLicks本來打算將其改爲通用的'myMethod';希望這個問題現在更有意義。 – CaptainProg

回答

1

你的錯誤在於方法的名稱。實現是didSelectText,接口是didSelectTerm。 (文本與術語 - >顯然應該是相同的)此外,您還可以將[[self class] otherMethod:text];作爲類方法使用,如果仔細觀察,方法不是。

+0

感謝您指出文字/術語。但是,我仍然收到錯誤... – CaptainProg

0

您的更改沒有意義。

您可以從其他類訪問實例方法 - 他們不必是類方法。類方法意味着它們是由類實現的方法 - 而不是類的實例。

其次,你的新類方法中,你調用一個方法(otherMethod :)這是一個實例方法,即一個由類的對象調用。既然你叫它[[self Class] otherMethod:text]這是錯誤的,因爲[self Class]用於調用類方法,而不是實例方法。您沒有有效的引用您的班級的對象來發送消息。

補充:

你已經實現了一個方法:

+ (void)myMethod:(CustomUIView *)customView didSelectTerm:(NSString *)text; 

,但你的協議預計:你給

+ (void)termTextClickedOn:(TSAlertView *)customView didSelectTerm:(NSString *)term; 

名稱您的實際參數沒關係,在在文本和期限差異不計,但該方法的名稱,如用Objective-C歸結爲:

+ myMethod:didSelectTerm: 

+ termTextClickedOn:didSelectTerm: 

不僅是兩個人的名字不同,但是多種類型的第一參數也是不同的,一個需要CustomUIView *,其他需要TSAlertView *,如果一個是它可能工作其他的子類,但無論如何,你的方法名稱是錯誤的。

+0

但這不是他得到警告的原因,看到我的答案... –

+0

現在你編輯答案,你說得對,想編輯我的評論,但我沒有能力,所以我增加了另一個強調 –

+0

我的道歉,我一直在改變我的方法名稱,使我的問題更具可讀性。在第一次編輯中,我忘記了相應地調整我的方法名稱。更新後的代碼反映了我應該*最初放置的內容。 – CaptainProg

相關問題