2016-05-27 9 views
2

Я следовал этому link реализовать compleltionblockРучки действия ContainerViewController в ParentViewController

@interface : ParentViewController() 

@property (nonatomic, strong) ChildViewController *childViewController; 

@end 

В методе родительского вида контроллера Table View делегат (didSelectRowAtIndexPath) Я добавляю вид контейнера следующего

- (void) addChildView { 
    ChildViewController * childViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ChildViewController"]; 
    childViewController.view.frame = (CGRect) {0, 0, self.view.frame.size}; 
    [self addChildViewController:childViewController]; 

    __block ParentViewController *parentViewController = self; 
    [parentViewController.childViewController setCompletionCallBack:^{ 
     self.childViewController.view.backgroundColor = [UIColor clearColor]; 
     [UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ 
      self.childViewController.view.frame = (CGRect) {0, 1000, self.view.frame.size}; 
     } completion:^(BOOL finished) { 
      [self.childViewController.view removeFromSuperview]; 
      self.childViewController = nil; 
     }]; 
    }]; 


    [self.view addSubview: childViewController.view]; 
    [childViewController didMoveToParentViewController:self]; 

    [UIView animateWithDuration:0.5f animations:^{ 
     childViewController.view.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.15f]; 
     [self.view layoutIfNeeded]; 
    } completion:nil]; 
} 

ChildViewController-х Интерфейс и реализация

@interface ChildViewController : UIViewController 

@property (nonatomic, copy) void (^completionCallBack)(); 

@end 

- (IBAction)cancelPressed:(id)sender { 
    self.completionCallBack(); 
} 

Когда я пытаюсь вызвать completeCallBack внутри действия кнопки, я получаю плохую ошибку доступа. enter image description here

Я не уверен, какую ошибку я здесь делаю, любая помощь очень ценится.

ответ

0

Наконец-то я нашел причину плохой ошибки доступа. Фактически у меня есть экземпляр ChildViewController как глобальная переменная, и я не загружаю ChildViewController в эту глобальную переменную, поэтому, когда я пытаюсь вызвать экземпляр completeCallBack ChildViewController, значение nil является причиной ошибки.

Fix - ChildViewController * childViewController

self.childViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ChildViewController"]; 
     childViewController.view.frame = (CGRect) {0, 0, self.view.frame.size}; 
     [self addChildViewController:childViewController];