我创建了一个使用委托的简单示例。问题是当我启动应用程序时,调用MyClass类并发送委托。但我无法在ViewController中收到它。下面是我的代码我想知道我做错了什么,以及是否错误地理解了代表。
为我的语法错误道歉。感谢您提前帮助
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" );
}
答案 0 :(得分: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_;
应该是“弱”&#39; (不强)。在做任何事情之前,你必须检查有效的代表。