2010-12-05 3 views
0

Je suis nouveau à la programmation Objective-C donc désolé pour la question boiteuse.iOS NSMutableArray insertObject index hors limite

J'essaye d'écrire une application simple qui ajouterait des nombres simples stockés dans le NSMutableArray à la vue de table.

Voici le code d'initialisation et le code pour la méthode addItem():

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"Test App"; 
    self.navigationItem.leftBarButtonItem = self.editButtonItem; 

    addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addItem)]; 
    self.navigationItem.rightBarButtonItem = addButton; 

    self.itemArray = [[NSMutableArray alloc] initWithCapacity:100]; 
} 

- (void)addItem { 
    [itemArray insertObject:@"1" atIndex:0]; 

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

Cette ligne

[itemArray insertObject:@"1" atIndex:0]; 

produit l'erreur suivante:

*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array' 

Pourquoi l'index 0 est au-delà des limites pour tableau vide et ce que je fais mal ???

UPD

Comme BP a fait remarquer, l'insertion dans un tableau peut ne pas fonctionner pour tableau vide, donc j'ajouté vérification suivante:

if ([itemArray count] == 0) { 
    [itemArray addObject:@"1"];  
} else { 
    [itemArray insertObject:@"1" atIndex:0]; 
} 

Alors maintenant, je reçois même message d'erreur, mais à la ligne

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

Des idées sur ce qui pourrait ne pas fonctionner avec elle?

Répondre

2

L'appel que vous faites dans insertRowsAtIndexPaths:withRowAnimation: devrait être entre beginUpdates et endUpdates appelez sur votre tableView.

Cochez la case TableView Programming Guide.

0

La méthode initWithCapacity ne réserve que de la mémoire pour les objets, elle ne crée pas réellement le nombre d'objets spécifiés dans votre tableau. Je ne suis pas sûr si vous pouvez insérer dans un tableau qui n'a pas encore d'objets, donc vous pouvez essayer d'utiliser la méthode addObject si le nombre de tableaux est 0, et la méthode insertObject dans le cas contraire.

+0

Merci, ça m'a aidé. Mais maintenant je reçois la même erreur, mais 2 lignes ci-dessous. Des idées quel est le problème avec ça? – IvanR

Questions connexes