2015-08-19 78 views
0

我已經創建了一個使用委託的簡單示例。問題是當我啓動應用程序時,MyClass類被調用並且委託被髮送。但我無法在ViewController中接收它。下面是我的代碼,我想知道我做錯了什麼,如果我錯誤地理解了代表。NSObject類代理不叫

道歉爲我的語法錯誤。謝謝你的幫助提前

MyClass.h

@protocol MyClassDelegate <NSObject> 
@required 
- (void) myClassDelegateMethod; 
@end 

@interface MyClass : NSObject 
{ 
    id<MyClassDelegate> delegate_; 
} 
@property(nonatomic, strong) id<MyClassDelegate> delegate_; 

MyClass.m

@synthesize delegate_; 

- (id)init 
{ 
    if (self = [ super init ]) 
    { 
     [ self myMethodDoStuff ]; 
    } 
    return self; 
} 

- (void) myMethodDoStuff 
{ 
    [ self.delegate_ myClassDelegateMethod ]; 
} 

ViewController.h

#import "MyClass.h" 
@interface ViewController : UIViewController<MyClassDelegate> 

ViewController.m

-(void) viewDidLoad 
{ 
    [ super viewDidLoad ]; 
    MyClass* class = [ MyClass new ]; 
    [ class setDelegate_:self ]; 
    [ self.view addSubView:class ]; 
} 

viewController.m中的myClassDelegateMethod方法未被調用。

-(void)myClassDelegateMethod 
{ 
    NSLog(@"Delegates"); 
} 

回答

1

問題是MyClass* class = [ MyClass new ];呼叫- (id)init,然後調用[ self myMethodDoStuff ];

但是此時[ class setDelegate_:self ];還未被調用。這意味着self.delegate_沒有指向任何東西(ViewController)。所以-(void)myClassDelegateMethod不叫

你應該先setDelegate,喜歡出頭:

[ class setDelegate_:self ]; 
[ class myMethodDoStuff ]; 

還有一個:

@property(nonatomic, strong) id<MyClassDelegate> delegate_; 

它應該是 '弱'(不強)。你必須在做任何事之前檢查有效的委託。

REF:Differences between strong and weak in Objective-C

+0

嘿它現在工作。感謝您的描述。 – Jaff

+0

也有可能,如果我讓MyClass單身課程?代表們是否會工作,在某些情況下是否適合使用? – Jaff

+0

是的,單身類與普通類幾乎相同。 – anhtu