0

快速提问,

我做了一个自定义委托

瞳孔视图.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>

主控制器.m

-(int) getPupilViewReason
{
    return 100;
}

如果我把 [[self delegate] getPupilViewReason]; 在 studentview.m 中的任何函数中,它都能完美运行,返回 100 我可以看到它带有断点等。

如果我把它放在 viewdidload 中,它不会加载,返回 0,不会命中断点等。关于原因的任何帮助。

谢谢

4

3 回答 3

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
于 2013-06-06T11:16:26.163 回答
0

去打电话吧。如果代理设置正确,那么它应该可以工作。你的意思是当你做一个 segue UI 转移的时候?

于 2013-06-06T11:09:35.750 回答
0

是的,您可以在 viewDidLoad 函数中调用委托。

假设您的委托(请求所有者)名称是“委托”,那么您可以调用 -

       - (void)viewDidLoad
           {
               [super viewDidLoad];

               [<OBJ>.delegate GetPupilViewReason];

           }

OBJ - 是一个类的实例,有分配委托。

于 2013-06-06T11:13:32.717 回答