快速提问,
我已经制作了一个自定义代表
PupilView.h
@protocol DismissPupilViewPopoverDelegate
- (int) getPupilViewReason;
@end
@interface PupilView : UIViewController{
id<DismissPupilViewPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPupilViewPopoverDelegate> delegate;
在PupilView.m中调用它,如下所示
[[self delegate] getPupilViewReason];
在我的maincontroller.h中
#import "PupilView.h"
@interface MainScreen : UIViewController<DismissPupilViewPopoverDelegate>
maincontroller.m
-(int) getPupilViewReason
{
return 100;
}
如果我把[[self delegate] getPupilViewReason];在pupilview.m中的任何函数中它都可以正常工作,返回100我可以看到它有一个断点等。
如果我把它放在viewdidload中,它不会加载,返回0,dosnt命中断点等等。任何有关原因的帮助。
感谢
答案 0 :(得分:1)
为您传递委托的视图控制器创建一个自定义init方法,以便在调用viewdidload之前在init方法中设置委托。
@interface
- initWithDelegate:(id)aDelegate nibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
//...
@end
@implementation
- initWithDelegate:aDelegate nibName:nibNameOrNil bundle:nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
_delegate = aDelegate;
///rest of init implementation
}
}
- (void)viewDidLoad{
[super viewDidLoad];
[self.delegate getPupilViewReason];
}
//...
@end
答案 1 :(得分:0)
来吧,打电话。如果代理设置正确,那么它应该工作。你的意思是当你进行segue UI转移时?
答案 2 :(得分:0)
是的,您可以在viewDidLoad函数中调用委托。
假设您的委托(请求所有者)名称是“委托”,那么您可以调用 -
- (void)viewDidLoad
{
[super viewDidLoad];
[<OBJ>.delegate GetPupilViewReason];
}
OBJ - 是一个类的实例,已经分配了委托。