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;
                 }];

}

コンパイルして実行しますが、このメソッドを呼び出して実際に 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 に答える