1

アラートの解除時に実行されるパラメーターとしてブロックを受け取るメソッドを宣言したいので、次のようなものを用意します。しかし、ブロック パラメーターを onDismiss 部分に渡すための構文にヒットすることはできません。

- (void) notifyUserOfProblemWithDismissBlock: ( (^)()) block
{
    [UIAlertView showAlertViewWithTitle: @"whatever"
                            message: nil
                  cancelButtonTitle: nil
                  otherButtonTitles:[NSArray arrayWithObject:     NSLocalizedString(@"BUTTON_OK", nil)]
                          onDismiss:^(int buttonIndex){
                              block;
                          }
                           onCancel:^ {}];
}
4

2 に答える 2

1

互換性のあるブロック タイプを渡す場合は、その引数名を使用します。

...
onDismiss:theBlock
...

それ以外の場合 (これは、遭遇した場合です)、最初に引数として渡されたブロックを呼び出す別のブロックにラップします。

...
onDismiss:^(int btnIdx) {
    theBlock();
}
...

また、 のように、ブロック内で何もするつもりがない場合は、またはそこonCancel:に渡すことができます。nilNULL

于 2013-01-07T21:45:12.207 に答える
1

'block' というブロックを UIAlertView メソッドに直接渡すには、そのメソッドが却下ブロックに期待するのと同じ署名 (同じ戻り値の型、メソッドの数、および型) が必要です。そうでないため、正しい署名を持つブロックを渡すことができ、そのブロックの本体でブロックを呼び出します。あなたはほとんどそこにいます。見逃している重要な点は、ブロックを呼び出すための構文が次のとおりであることです。

ブロック();

だから、これをしてください

- (void) notifyUserOfProblemWithDismissBlock:(void(^)(void)) block
{
    [UIAlertView showAlertViewWithTitle:@"whatever"
                                message:nil
                      cancelButtonTitle:nil
                      otherButtonTitles:@[NSLocalizedString(@"BUTTON_OK", @"BUTTON_OK")]
                              onDismiss:^(int buttonIndex) {
                                  block();
                              }
                               onCancel:^{}];
}
于 2013-01-07T21:47:17.060 に答える