2011-01-31 215 views
0

我似乎無法按照我想要的方式構建我的協議,並且我縮小了使用派生類的問題。如果我使用可可類,它似乎工作。以下是我有...在協議中創建委託方法

#import <Foundation/Foundation.h> 
#import "MyView.h" 

@protocol MyDelegate 
- (void)view:(MyView *)aView didDoSomethingWithString:(NSString *)string; 
@end 

的MyView的類是......

#import <UIKit/UIKit.h> 
@interface MyView : UIView { 
    NSString *whatever; 
} 
- (void)myMethod; 
@end 

@implementation MyView 
- (void)myMethod { 
doSomething... 
} 
@end 

所以,當我試圖建立我得到「‘MyView的’前預期‘)’」的錯誤。如果我用UIView替換自定義類MyView,然後代碼編譯。我希望有人看到我忽略的東西。任何想法都表示讚賞。

謝謝。

+0

你是否在你的聲明中包含你的協議聲明和你的協議聲明中的視圖聲明?我的意思是,兩個.h相互引用? – seppo0010 2011-01-31 02:51:49

+0

OH DRATS!是的,我願意。我有一個循環參考。腐爛的東西偷偷靠在我身上。在MyView類中,我有一個實現協議的id類型的引用。 「id 」我甚至沒有發現它。謝謝! – Rob 2011-01-31 03:32:24

回答

2

您確定MyView.h包含@interface MyView : UIView

此外,您可以使用@class而不是導入。例如

@class MyView; 
@protocol MyDelegate 
- (void)view:(MyView *)aView didDoSomethingWithString:(NSString *)string; 
@end
+0

抱歉。對錯誤的帖子發表評論。忽視。 – drekka 2011-01-31 02:57:28

1

嘗試將@interface和@implementation部分放在不同的文件中(如果您當前在同一個文件中)。它看起來像你在MyView.m中的所有內容,並且你正在導入MyView.h,它不存在。