在viewdidload中调用委托

时间:2013-06-06 10:56:34

标签: objective-c ipad

快速提问,

我已经制作了一个自定义代表

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命中断点等等。任何有关原因的帮助。

感谢

3 个答案:

答案 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 - 是一个类的实例,已经分配了委托。