2010-06-22 36 views
1

一個簡短的問題,如果我可以,任何人都可以解釋我在下面丟失什麼,我假設第三個將工作?@property代表?

@interface ... 
// These work 
@property(assign) SomeClass *someDelegate; 

@property(assign) id someDelegate; 

// This gives warning 
@property(assign) id <SomeClassDelegate> someDelegate; 

@implementation ... 
@synthesize someDelegate; 

[self setSomeDelegate:[[SomeClass alloc] init]]; 
[someDelegate setDelegate:self]; 

warning: method '-setDelegate:' not found (return type defaults to 'id') 

EDIT_001:

// SomeClass.h 

#import <Foundation/Foundation.h> 

@class SomeClass; 

@protocol SomeClassDelegate <NSObject> 
@optional 
-(void)didHappen:(SomeClass *)someClass; 
@required 
-(void)willUse:(SomeClass *)someClass withThis:(BOOL)flag; 
@end 

@interface SomeClass : NSObject { 
    id <SomeClassDelegate> delegate; 
} 
@property(assign) id <SomeClassDelegate> delegate; 
-(void)otherActions; 
@end 

歡呼加里。

+1

這裏有沒有足夠的代碼SomeClass是什麼?SomeClassDelegate的定義是什麼?你會得到什麼警告? – deanWombourne 2010-06-22 15:01:23

+0

新增SomeClass.h,@synthesize和警告: – fuzzygoat 2010-06-22 15:15:53

+0

我知道這是一個很好的答案,但我不能確切地得到它適合我的問題 – Morkrom 2013-05-30 22:07:54

回答

3

Go協議!

@protocol MyDelegateProtocol 
- (NSNumber*) someFunction:(NSArray*) anArray; 
@end 

@interface MyClass : NSObject { 
    id<MyDelegateProtocol> delegate; 
} 

@property id<MyDelegateProtocol> delegate 

@end 

然後在你的@implementation:

@synthesize delegate; 

據我所知,可可方式:-)

乾杯

+0

嗨,我可以問一下你將如何實例化? – fuzzygoat 2010-06-22 17:14:15

+0

當然,如果該協議在MyClass.h聲明,做你的控制器頭MyController.h(或任何你想要使用它)#進口「MyClass.h」,然後在@interface行myController的添加在{之前,因此說這個類實現MyDelegateProtocol。然後,你需要的是在該類中實現協議功能,在這種情況下 - (NSNumber *)somefunction:(NSArray *)anArray; – niklassaers 2010-06-22 17:45:03

0

除非它存在並且您沒有顯示它,否則您沒有setDelegate方法。雖然你有一個setSomeDelegate方法。

+0

嗨庫比什,setDelegate是下@implementation 3號線。 – fuzzygoat 2010-06-22 15:24:31