2015-06-20 42 views
0

我有一些視圖控制器叫mainContainer,他比導入一些其他視圖控制器調用myPills,並將其添加爲子視圖。代表沒有申報?

mainContainer也有一個派代表到myPills類,它看起來像:

//mainContainer.h 
@protocol mainScrollerDelegate <NSObject> 

-(void)function; 

@end 

@interface MainContainerView : UIViewController<UIScrollViewDelegate> 

比,顯然是myPills類我不能導入mainContainer觀點,但我要註冊致mainContainer代表。

所以myPills

@interface MyPillsView : UIViewController <mainScrollerDelegate> 

會給編譯錯誤。

我看了這一點,並試圖移動進口是根據代表,沒有成功。(同樣的錯誤,該委託是未申報)

Cannot find protocol declaration

你怎麼能收聽CLASSB委託來自classA,其中classA正在導入classB,因此classB不能導入A?

回答

1

把你的協議的聲明在其自己的Protocols.h文件,例如:

//Protocols.h 
@protocol mainScrollerDelegate <NSObject> 

-(void)function; 

@end 

然後,只需將其導入到雙方誰在發送委託方法控制器,並委託本身:

#import "Protocols.h" 

@interface MyPillsView : UIViewController <mainScrollerDelegate> 

此方法將保持您的所有協議組織,並可幫助刪除循環導入。

旁註:你應該真的使用你的協議的類命名約定(即MainScrollerDelegate)。

+0

那麼protocols.h應該如何?在Xcode中創建什麼樣的文件?你的側音是什麼意思?非常感謝! – Curnelious

+0

// Protocols.h後面的代碼塊實際上就是該文件中所需的全部代碼。只需在Xcode中創建一個頭文件。我的旁註有一個大寫的'M'而不是小寫的'm' - 它有助於區分變量和類。 – rebello95

+0

謝謝你。偉大的建議。 – Curnelious