0

クイック質問、

カスタムデリゲートを作成しました

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]; を入れた場合 pupupureview.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 に答える