1

我猜我的语法是关闭的,但我似乎无法弄清楚这一点,因为我是新的块。我有这个自定义方法:

-(void)animateViewConstraintChange: (void(^)(void))completionHandler;

这个方法看起来像这样:

-(void)animateViewConstraintChange:(void(^)(void))completionHandler
{
    [[self view]setNeedsUpdateConstraints];
    [UIView animateWithDuration:0.6
                 animations:^{
                 [[self view]layoutIfNeeded];
                 } completion:^(BOOL finished){
                     completionHandler;
                 }];

}

它编译并运行,但是当我调用此方法并实际为完成处理程序放入某些内容时,该代码永远不会被调用。

[self animateViewConstraintChange:^{
    [orderedViewControllers removeObject:[self middleViewController]];
    [[[self middleViewController] view] removeFromSuperview];

    [[self middleViewController] removeFromParentViewController];

    _middleViewController = nil;

    [[self view]setNeedsUpdateConstraints];
}];    

因此,在上述代码的情况下, animateViewConstraintChange 被调用,但块中的代码没有。

此外,编译器在 animateViewConstraintChange 方法中给了我一个错误

completionHandler;

说,“未使用的表达结果”。

感谢您的关注。

4

1 回答 1

3

应该用括号调用块:

} completion:^(BOOL finished){
                 completionHandler();
         }];
于 2013-02-05T22:37:54.940 回答