2010-08-22 11 views
0

ive a utilisé le code standard sdk pour la suppression, mais elle se bloque une fois que j'appuie sur le bouton de suppression. je suis en utilisant ce codeSuppression de cellule de vue de table maintenant en cours

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

if (editingStyle == UITableViewCellEditingStyleDelete) { 
// Delete the row from the data source 
[tableView deleteRowsAtIndexPaths:[tableFavoritesData arrayWithObject:indexPath] withRowAnimation:YES]; 
} 

} 

j'ai essayé avec les deux NSMutableArray au lieu de tableFavoritesData mais rien ne fonctionne. quelqu'un peut-il m'aider?

Répondre

2

Eh bien, au fond ce que vous voulez faire est:

  1. Supprimer la ligne de la source de données (tableau).
  2. Indiquez à la vue de table que vous avez supprimé une ligne de la source de données.

code correct devrait probablement ressembler à ce que:

if (editingStyle == UITableViewCellEditingStyleDelete) { 
[tableFavoritesData removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

EDIT: Je ne l'ai pas remarqué une autre erreur.

Vous devez spécifier le type d'animation, pas seulement passer YES ou NO. Par exemple: UITableViewRowAnimationFade. Consultez les valeurs UITableViewRowAnimation possibles here.

EDIT 2: Pour le commentaire ci-dessous (commentaires de mise en forme suck): Commander NSNotificationCenter dans la documentation, en particulier addObserver: sélecteur: nom: objet: et postNotificationName: objet: méthodes.

Dans l'autre contrôleur de vue (probablement la méthode viewDidLoad):

[[NSNotificationServer defaultCenter] addObserver:self selector:@selector(deletedRow:) name:@"RowDeleted" object:nil]; 

-(void) deletedRow:(NSNotification*) notification 
{ 
    NSDictionary* userInfo = [notification userInfo]; 
    NSIndexPath indexPath = [userInfo objectForKey:@"IndexPath"]; 
// your code here 
} 

et en supprimant la ligne:

if (editingStyle == UITableViewCellEditingStyleDelete) { 
... 
[[NSNotificationServer defaultCenter] postNotificationName:@"RowDeleted" object:self userInfo:[NSDictionary dictionaryWithObject:indexPath forKey:@"IndexPath"]]; 
    } 

Rappelez-vous simplement que vous devez supprimer observateur du centre de notification lorsque vous dealloc la autre UIViewController:

[[NSNotificationServer defaultCenter] removeObserver: self]; 

Espérons que je n'ai pas ma ke beaucoup d'erreurs, je n'ai pas accès à XCode atm.

+0

Merci beaucoup. (une note à ma question j'ai un tableau de données qui est copié d'un autre contrôleur à celui qui a une table.) Est-il possible de supprimer un objet de ce tableau sans avoir à recopier le tableau entier et nsuserdefault est-il supprimé?) –

+0

J'ai ajouté un exemple de code à la réponse, je n'ai pas pu modifier mon commentaire car il a déjà été modifié. Généralement, vous souhaitez enregistrer votre autre ViewController en tant qu'observateur et lui envoyer une notification lors de la suppression de l'objet. – Mayjak

0

Si vous avez regardé la console, elle vous indiquera probablement que votre modèle (votre structure de données) ne correspond pas à ce que la table attend. C'est à dire. votre méthode de délégué

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

doit renvoyer un de moins qu'avant.

Aussi, [tableFavoritesData arrayWithObject:indexPath] semble très étrange et n'est probablement pas ce qui est attendu. Peut-être que vous voulez [NSArray arrayWithObject:indexPath] ici. Et supprimez les données de votre modèle en premier.

Questions connexes