70 votes

NSMutablearray déplace l'objet d'un index à l'autre

J'ai un UItableview avec les lignes ré-modifiables et les données sont dans un NSarray. Alors, comment déplacer un objet dans NSMutablearray lorsque le délégué tableview approprié est appelé?

Une autre façon de demander ceci est comment réorganiser un NSMutableArray?

116voto

Joost Points 7673
 id object = [[[self.array objectAtIndex:index] retain] autorelease];
[self.array removeObjectAtIndex:index];
[self.array insertObject:object atIndex:newIndex];
 

C'est tout. Prendre en compte le nombre de retenues est important, car le tableau peut être le seul à référencer l’objet.

47voto

Oliver Pearmain Points 5096

Catégorie conforme à l'ARC:

NSMutableArray + Convenience.h

 @interface NSMutableArray (Convenience)

- (void)moveObjectAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;

@end
 

NSMutableArray + Convenience.m

 @implementation NSMutableArray (Convenience)

- (void)moveObjectAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex
{
    // Optional toIndex adjustment if you think toIndex refers to the position in the array before the move (as per Richard's comment)
    if (fromIndex < toIndex) {
        toIndex--; // Optional 
    }

    id object = [self objectAtIndex:fromIndex];
    [self removeObjectAtIndex:fromIndex];
    [self insertObject:object atIndex:toIndex];
}

@end
 

Usage:

 [mutableArray moveObjectAtIndex:2 toIndex:5];
 

2voto

bbum Points 124887

Si vous avez un NSArray , vous ne pouvez rien déplacer ou réorganiser car il est immuable.

Vous avez besoin d'un NSMutableArray . Avec cela, vous pouvez ajouter et remplacer des objets, ce qui signifie bien sûr que vous pouvez également réorganiser le tableau.

0voto

Jinru Points 391

Je suppose que si je comprends bien, vous pouvez faire:

 - (void) tableView: (UITableView*) tableView moveRowAtIndexPath: (NSIndexPath*)fromIndexPath toIndexPath: (NSIndexPath*) toIndexPath

{
    [self.yourMutableArray moveRowAtIndex: fromIndexPath.row toIndex: toIndexPath.row]; 
    //category method on NSMutableArray to handle the move
}
 

Ensuite, vous pouvez ajouter une méthode de catégorie à NSMutableArray en utilisant la méthode suivante - insertObject: atIndex: pour gérer le déplacement.

0voto

Sixten Otto Points 10267

Tu ne peux pas. NSArray est immuable. Vous pouvez copier ce tableau dans un NSMutableArray (ou l'utiliser en premier lieu). La version mutable a des méthodes pour déplacer et échanger ses éléments.

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