2012-02-08 136 views
2

我在更新標籤的關鍵事件上調用方法。ViewDidLoad中的調用方法()

[self updateFolderText]; 

當我這樣做是它的工作原理事件的方法,但是當我嘗試這樣做在viewDidLoad中(),我得到一個編譯錯誤。

- (void)viewDidLoad 
{ 
    [super viewDidLoad];  
    [self updateFolderText]; 
} 

我得到以下錯誤:

error: Automatic Reference Counting Issue: Receiver type 'ViewController' 
for instance message does not declare a method with selector 'updateFolderText' 

埃姆...我想這一定是微不足道的......我是新來的Objective-C。謝謝。 :)

+1

如果您顛倒指示,會發生什麼情況? (調用'[self updateFolderText];'然後'[super viewDidLoad];') – Zakaria 2012-02-08 15:58:43

+1

該方法在您的視圖控制器的.h中展開,然後在您的.m中實現?我真正要問的是......這個方法在哪裏?我會做扎卡里亞說的......哈哈。 – tallybear 2012-02-08 15:59:50

+0

哈哈......該死......我真的忘了把它放到頭文件中。對不起,這是一個非常漫長的一天;) – Chris 2012-02-08 16:05:51

回答

4

該問題可能是因爲您的方法updateFolderText定義在viewDidLoad以下。將您的代碼移動到下面的updateFolderText,它應該可以工作。

或者,您可以在您的班級中明確聲明該方法。加上以下@implementation

@interface className() 
-(void)yourMethod; //not sure how youve fully define updateFolderText 
@end 

,或者像你說的,你也可以在你的頭文件中定義它:

-(void)yourMethod; //not sure how youve fully define updateFolderText 
+1

只是打我吧:) – 2012-02-08 16:02:05

+1

哈哈該死的我太 – glogic 2012-02-08 16:03:54

+0

三個答案都是一樣的 - 現在有一些像樣的答案驗證;-) – 2012-02-08 16:05:38

2

你需要確保你已經聲明之前在格蘭視圖 - 控制的.H功能updateFolderText在@end一般(公共職能)或私人聚會,你會在.M的頂部

@interface viewcontrollername() 
-(void)updateFolderText; 
@end 

它可能是其他的工作在哪裏的代碼,因爲你具備的功能它宣佈它自我以上它被稱爲

2

確保您的方法在您的類的接口中聲明。有兩種選擇。要將它聲明爲您的類的可公開訪問的方法,您必須將其放入標頭(.h)文件中。

聲明看起來是這樣的:

@interface myClass : UIViewController 
- (void)updateFolderText; 
@end 

要聲明是因爲這是唯一的類中訪問(當然,不是真的,但有效的),那麼你可以把這個在上面的方法你.m文件,@implementation

@interface myClass() 
- (void)updateFolderText; 
@end 

這第二種方法使得之前的方法「私人」至於建造時間的警告有關。請注意,實際上該類仍然會在運行時對此選擇器作出響應。

+0

這樣做的第二種方式叫做「Class Continuation」,它們很棒。 :D正如你所說,不是私人的,而是隱藏得如此有效的私人。 – Sam 2012-02-08 16:13:02

1

確保-(void)updateFolderText已定義,無論是在.h文件還是在.m文件的專用界面中。另外,如果-(void)updateFolderText物理上位於.m文件中的viewDidLoad方法的上方,它應該能夠看到它。