2015-05-11 57 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]; 
}