2015-08-19 44 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