web-dev-qa-db-fra.com

Quelle est la cause de ceci: impossible de passer d'une instruction switch à cette étiquette de cas

Ceci est une instruction switch sur laquelle je reçois des erreurs:

        switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

            // show wait view here
            statusLabel.text = @"Processing...";
            break;

        case SKPaymentTransactionStatePurchased:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view and unlock iClooud Syncing
            statusLabel.text = @"Done!";

            NSError *error = nil;
            [SFHFKeychainUtils storeUsername:@"IAPNoob01" andPassword:@"whatever" forServiceName: kStoredData updateExisting:YES error:&error];

            // apply purchase action  - hide lock overlay and
            [oStockLock setBackgroundImage:nil forState:UIControlStateNormal];

            // do other thing to enable the features

            break;

        case SKPaymentTransactionStateRestored:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view here
            statusLabel.text = @"";
            break;

        case SKPaymentTransactionStateFailed:

            if (transaction.error.code != SKErrorPaymentCancelled) {
                NSLog(@"Error payment cancelled");
            }
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            // remove wait view here
            statusLabel.text = @"Purchase Error!";
            break;

        default:
            break;
    }

Les deux derniers cas, plus le cas par défaut, me donnent l'erreur suivante:

Impossible de passer d'une instruction switch à cette étiquette de cas

J'ai utilisé l'instruction switch très souvent. c'est la première fois que je vois ça. Le code a été copié à partir d'un tutoriel ( here ), que je tente d'adapter pour mon application. J'apprécierais l'aide sur celui-ci. Dakota du Sud

43
SpokaneDude

C n'est pas rapide. Vous serez plus heureux si vous structurez vos déclarations switch en utilisant des accolades autour de tous les cas, comme this :

switch (tag) {
    case 1: { // curly braces
        // ...
        break;
    }
    case 2: {  // curly braces
        // ...
        break;
    }
    case 3: {  // curly braces
        // ...
        break;
    }
}

Le niveau supplémentaire d'accolades vous permet de faire des choses que vous ne pouvez pas faire autrement.

110
matt