2012-07-28 76 views
1

我有一個簡單的委託測試,但由於某種原因,它不會被調用。代表將無法工作

我想通過委託調用-(void)testAppDelegate類。

/// AppDelegate.h

#import <Cocoa/Cocoa.h> 
@protocol AppDelegateDelegate 
@required 
-(void)test; 
@end 
@interface AppDelegate : NSObject <NSApplicationDelegate> { 
    id<AppDelegateDelegate> _delegate; 
} 
@property(nonatomic, retain) id<AppDelegateDelegate> delegate; 
@end 

/// AppDelegate.m

#import "AppDelegate.h" 
@implementation AppDelegate 
@synthesize delegate = _delegate; 
-(void)awakeFromNib { 
    [_delegate test]; 
} 
@end 

/// test.h

#import <Foundation/Foundation.h> 
#import "AppDelegate.h" 
@interface test : NSObject <AppDelegateDelegate> 
-(void)test; 
@end 

/// test.m

#import "test.h" 
@implementation test 
-(void)test { 
    //this should be called from AppDelegate 
    NSLog(@"delegate test"); 
} 
@end 

回答

0

一旦加載了AppDelegate類,並且沒有其他類有機會將自己設置爲委託,您正在調用代理test方法。您需要在之後撥打代表方法,另一個班級有機會將自己設置爲代表。

而且你委託屬性應該被定義爲:

@property (assign) IBOutlet id <AppDelegateDelegate> delegate; 
+0

好的,我創建 - (IBAction爲)buttonCall:(ID)發送方{[委託試驗];所以現在有足夠的時間讓測試將它設置爲委派猜測。 我也在調用委託之前初始化它,並且我將屬性更改爲@property(assign)IBOutlet id 委託; ,測試仍然不叫 – user840250 2012-07-28 09:06:56

+0

@ user840250'test'對象在哪裏設置自己作爲委託? – trojanfoe 2012-07-28 09:11:57

+0

謝謝, test * testDelegate = [[test alloc] init]; [self setDelegate:testDelegate]; – user840250 2012-07-28 09:21:58