2010-09-22 8 views
0

Je dois fermer une série de vues et je ne vais pas écrire de code pour les fermer une par une. Voici un exemple de code pour illustrer ce que je veux dire:Fermer une série de vues dans une boucle forcée [iPhone]

// Ceci est la méthode pour placer les vues. Il est appelé à différents moments lors de l'exécution:

- (void)addNotePic:(int)number { 

int indexNumber = ((110*number) + 10); 

UIImage *image = [UIImage imageNamed:@"Note.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage: image]; 
[image release]; 
imageView.frame = CGRectMake(10, indexNumber, 300, 100); 
imageView.tag = 100 + number; 
[self.view addSubview: imageView]; 
[self.view sendSubviewToBack: imageView]; 
[imageView release]; 

}

// Et voici la question-part, et la chose que je vous demande les gars au sujet. C'est la méthode que je souhaite supprimer toutes les vues affichées à la fois.

for (i = 0; i < 20; i++) { 
    UIView *imageView = [self.view viewWithTag:100 + i]; 
    [imageView removeFromSuperview]; 
} 

Je sais cela se traduit par des erreurs, puisque je tente de redéfinir imageView la deuxième fois des boucles, mais comment puis-je travailler autour de cela. Peut-être quelque chose à renommer le nom 'imageView' en 'imageView + i' ou quelque chose de plus intelligent. J'adorerais une bonne suggestion ...

+3

Votre question n'est pas avec la variable 'imageView' redéfinie, qui est tout à fait légal. Avez-vous un message d'erreur dans la console? Avez-vous traversé cela dans le débogueur? Fait-il ce que vous pensez que c'est? De quelle ligne provient l'erreur? Y a-t-il définitivement des vues avec les tags 100..119? –

+0

-1. Les variables ne fonctionnent pas comme ça. Votre code est correct. –

+0

Le message de la console est: Signal reçu du programme: "EXC_BAD_ACCESS". Vérifié, et c'était mauvaise gestion de la mémoire. Résolu l'ensemble du problème en ne libérant pas la vue après la création. Pas le meilleur moyen, mais ça résout pour l'instant ... –

Répondre

0

J'avoue que je suis en train de deviner rapidement, mais cela fonctionnerait-il?

for (i = 0; i < 20; i++) { 
    [[self.view viewWithTag:100 + i] removeFromSuperview]; 
} 
+0

Pense que j'ai essayé ça hier soir, mais ça n'a pas l'air de viser correctement les vues. Je vais essayer à nouveau quand je rentrerai à la maison ... –

0

Ce qui suit va supprimer tous les UIImageViews de self.view. Notez que le tableau mutable est nécessaire que vous ne pouvez pas modifier un tableau qui est itéré (comme dans la boucle)

NSMutableArray *removeThese = [NSMutableArray arrayWithCapacity:5]; 

for (UIView *view in self.view.subviews) { 
if([view isKindOfClass:[UIImageView class]]) { 
    // [view removeFromSuperview]; <-- This will result in a runtime error 
    [removeThese addObject:view]; 
} 
} 

[removeThese makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
+0

Je vais essayer quand je serai à la maison ... –