2009-02-05 10 views
2

J'ai NSMutableArray et l'ai utilisé comme file d'attente pour les actions d'attente.Comment utiliser NSMutableArray en tant que file d'attente?

Exemple dans le tableau:

0: "Faire quelque chose"
1: "Faites quelque chose d'autre"
2: "Faites quelque chose 2"

Quand je [myarray removeObjectAtIndex:0] le tableau n'est pas ReOrdering et la prochaine fois que j'utilise [myarray objectAtIndex:o] le résultat est nil.

Comment puis-je mettre "faire quelque chose d'autre" dans le premier index et "faire quelque chose 2" dans le deuxième index lorsque je supprime "faire quelque chose"?

+0

Pouvez-vous poster un exemple de code montrant ce qui ne fonctionne pas? removeObjectAtIndex: devrait faire exactement ce que vous voulez. –

Répondre

3

NSArray se comporte déjà comme vous le souhaitez, et ne peut en fait contenir aucun. Il semble que votre tableau soit en quelque sorte mis à zéro.

1

Je suppose que vous n'êtes pas enlever tout itérer ...

10
/* gcc -framework Cocoa myprogram.m -o myprogram */ 

#import <Cocoa/Cocoa.h> 

int main(int argc, char **argv) 
{ 
    NSMutableArray *array = [ [ NSMutableArray alloc ] 
          initWithObjects: @"1", @"2", @"3", 
              nil ]; /* don't forget nil */ 

    /* "pop" the first object */ 
    [ array removeObjectAtIndex:0 ]; 

    /* prints "2" as expected */ 
    NSLog(@"%@", [ array objectAtIndex: 0 ]); 
} 
+0

Le seul problème est que vous pourriez vous attendre à ce qu'un tableau pop renvoie l'objet, mais removeObjectAtIndex ne renvoie rien. –

8

Je gère normalement mes files d'attente dans l'ordre inverse, mais l'effet est le même:

// somewhere in your code you insert into the queue (always at index 0) 
[myArray insertObject:anObject atIndex:0]; 

puis, d'ailleurs, vous lisez de la file d'attente:

// Process elements in the queue in a FIFO manner 
while ([myArray count]) 
{ 
    id object = [myArray lastObject]; 

    // do something with object 

    [myArray removeObjectAtIndex:[myArray count] - 1]; 
} 
0

Quand je [myarray r emoveObjectAtIndex: 0] le tableau ne se réorganise pas et la prochaine fois que j'utilise [myarray objectAtIndex: o] le résultat est nul.

Votre problème semble être que vous avez un cas inférieur O et non le nombre 0

+1

Cela provoquerait juste une erreur de compilation ... à moins que le questionneur n'ait réellement une variable nommée 'o', auquel cas le questionneur obtiendrait soit un objet valide (bien que peut-être pas celui attendu par le questionneur) ou une exception NSRangeException. –

Questions connexes