283 votes

Lors de la conversion d'un projet en ARC, que signifie "switch case is in protected scope" ?

Lors de la conversion d'un projet pour utiliser ARC, que signifie "switch case is in protected scope" ? Je suis en train de convertir un projet pour utiliser ARC, en utilisant Xcode 4 Edit -> Refactor -> Convert to Objective-C ARC... Une des erreurs que je reçois est "switch case is in protected scope" sur "certains" des interrupteurs dans un switch case.

Modifier, Voici le code :

l'ERREUR est marquée sur le cas "par défaut" :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"";
    UITableViewCell *cell ;
    switch (tableView.tag) {
        case 1:
            CellIdentifier = @"CellAuthor";
            cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        cell.textLabel.text = [[prefQueries objectAtIndex:[indexPath row]] valueForKey:@"queryString"];
        break;
    case 2:
        CellIdentifier = @"CellJournal";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        cell.textLabel.text = [[prefJournals objectAtIndex:[indexPath row]] valueForKey:@"name"];

        NSData * icon = [[prefJournals objectAtIndex:[indexPath row]] valueForKey:@"icon"];
        if (!icon) {
            icon = UIImagePNGRepresentation([UIImage imageNamed:@"blank72"]);
        }
        cell.imageView.image = [UIImage imageWithData:icon];

        break;

    default:
        CellIdentifier = @"Cell";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
        break;
    }

    return cell;
}

652voto

FeifanZ Points 9348

Entourer chaque cas d'une accolade {} . Cela devrait résoudre le problème (c'est ce qui s'est passé pour moi dans un de mes projets).

14voto

Flyingdiver Points 1308

Difficile d'être sûr sans regarder le code, mais cela signifie probablement qu'il y a une déclaration de variable à l'intérieur du switch et que le compilateur ne peut pas dire s'il y a un chemin clair vers le point de dealloc requis.

5voto

Z. Zepos Points 51

Pour moi, le problème a commencé au milieu d'un switch et les accolades n'ont pas fonctionné, à moins que vous ne deviez inclure {} DANS TOUS les cas précédents. Pour moi, l'erreur est survenue lorsque j'avais l'instruction

NSDate *start = [NSDate date];

dans le cas précédent. Après l'avoir supprimé, toutes les déclarations de cas suivantes ont été exemptes du message d'erreur "protected scope".

3voto

Roozbeh Points 1939

Avant :

    case 2:
        NSDate *from = [NSDate dateWithTimeIntervalSince1970:1388552400];
        [self refreshContents:from toDate:[NSDate date]];
        break;

J'ai déplacé la définition de NSDate avant le switch, et cela a réglé le problème de compilation :

NSDate *from;  /* <----------- */
switch (index) {
    ....
    case 2:
        from = [NSDate dateWithTimeIntervalSince1970:1388552400];
        [self refreshContents:from toDate:[NSDate date]];
        break;

}

1voto

hemant_maverik Points 29
default:
        CellIdentifier = @"Cell";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            ***initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];***
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
        break;
    }

Note : Vérifiez ! La syntaxe de la ligne en gras et en italique. Rectifiez-la et vous êtes prêt à partir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X