NSObject类代理不叫
问题描述:
我已经创建了一个使用委托的简单示例。问题是当我启动应用程序时,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");
}
答
问题是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_;
它应该是 '弱'(不强)。你必须在做任何事之前检查有效的委托。
嘿它现在工作。感谢您的描述。 – Jaff
也有可能,如果我让MyClass单身课程?代表们是否会工作,在某些情况下是否适合使用? – Jaff
是的,单身类与普通类几乎相同。 – anhtu