2015-05-11 56 views
0

ContainerViewController委託方法-delegateMethodChildViewController
但在下面的代碼中,-delegateMethod未被調用。
我認爲這是因爲_childViewController已經發布。
我該如何修復它才能運行-delegateMethodContainerViewController委託給ChildViewController

ContainerViewController.h

@protocol ContainerViewDelegate <NSObject> 

- (void)delegateMethod; 

@end 

@interface ContainerViewController : UIViewController 

@property (nonatomic, assign) id<ContainerViewDelegate> delegate; 

@end 

ContainerViewController.m

@interface ContainerViewController() { 
    ChildViewController *_childViewController; 
} 

//... 

- (void)viewDidLoad 
{ 
    _childViewController = [[WeeklyViewController alloc]init]; 
    [self addChildViewController:_childViewController]; 
    [self.view addSubview:_childViewController.view]; 
    [_childViewController didMoveToParentViewController:self]; 
} 

- (void)buttonAction { 
    [self.delegate delegateMethod]; 
} 

ChildViewController.m

@interface ChildViewController() <ContainerViewDelegate> 

//... 

- (void)delegateMethod { 
    NSLog(@"succeed!"); 
} 
+0

_childViewController沒有被釋放。當你將它作爲一個子項添加時,ContainerViewController獲得了一個強指針。 – rdelmar

回答

3

你從來沒有委託,所以self.delegate將是零。你應該這樣做,

- (void)viewDidLoad 
{ 
    _childViewController = [[WeeklyViewController alloc]init]; 
    self.delegate = _childViewController; 
    [self addChildViewController:_childViewController]; 
    [self.view addSubview:_childViewController.view]; 
    [_childViewController didMoveToParentViewController:self]; 
}