2012-06-08 59 views
1

這裏就是我想要做的事:聲明中ObjC子類失敗

我要放好一些方法爲單獨的.h和.m文件爲我的代碼更好的概述。

所以基本上我有myViewController,我想擴展方法myReactionOnAnimationDidEnd:作爲類別。

所以我在"myCustomClasses.h"宣佈以下將它與我期望的方法擴展:

#import "myViewController.h" 
@interface myViewController (myReactionOnAnimationDidEnd) 
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification; 
@end 

"myCustomClasses.m"實現是:

#import "myCustomClasses.h" 
#import "myViewController.h" 

@implementation myViewController (myReactionOnAnimationDidEnd)  
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification { 

    self.myLabel1.text = @"Test"; 
} 
@end 

編譯器會引發一個編譯失敗的錯誤「無法找到接口'myViewController'的聲明「

所以這裏是我的問題:

  1. 第一個奇怪的是,這一切工作正常,如果我這樣做完全一樣的,而不是的UIViewController的myViewController。但由於myViewController是UIViewController的子類,它爲什麼不能用於myViewController(@interface iSnahViewController:UIViewController)呢?

  2. 另一個奇怪的是,如果我完全跳過@declaration,「myCustomClasses.m」中的@implementation工作得很好。現在怎麼可能?

謝謝各位! 任何幫助非常感謝! 漢斯


現在,有趣的是,這很同一棟樓錯誤出現,即使我創建一個新文件的類別 - > ObjC - 類別模板。它基本上創建了以下兩個文件:

在頭文件:

#import "myViewController.h" 

@interface myViewController (myCategories) //<-- "Cannot find interface declaration for 'myViewController'" 



@end 

,並與.m文件

#import "myViewController+myCategories.h" 

@implementation myViewController (myCategories) 


@end 

而這已經足夠了,從上面調出錯誤。

+1

目前還不清楚myViewController和iSnahViewController之間的關係。另外,編譯器錯誤在哪裏發生? –

+0

你可能想重新提出你的問題,因爲你不是創建一個子類,而是創建一個類別。 – Martin

+0

@PhillipMills:對不起,我爲了更好的可讀性而調整了名字,iSnahViewController是myViewController(我在我的問題中調整了它) – Hans

回答

0

我終於搞定了!

由於建築物出現錯誤,我被導入類別,.H文件到primery類的.h文件中:

#import "myViewController+myCategories.h" //<-- in the "myViewController.h" 

這導致建築誤差從上面。這似乎是錯誤的!所以不要這樣做。

我還沒有完全理解「myViewController」類如何知道它的類別,但沒有導入它們的.h文件,但是由於這看起來是一種工作方式,所以我想要與你分享。

感謝大家的幫助!

+0

如果您回答自己的問題,請將此答案標記爲正確。 –

0

myCustomClasses.m應該可能包含myCustomClasses.h而不是myViewController.h,因此編譯器會看到類別聲明。由於myCustomClasses.h已包含myViewController.h,因此編譯器應具有所有必要的聲明。

+0

謝謝,剛試過,但沒有成功。 – Hans