J'ai des données dans un NSSet et je dois les entrer dans un NSArray.
Dois-je le trier moi-même (encore une fois, cela vient de Core Data) ou puis-je le sortir dans un ordre trié?
Vous pouvez spécifier un tri lorsque vous récupérez des données avec un NSFetchRequest
en définissant la propriété sortDescriptors
sur un tableau de NSSortDescriptor
s. Mais si vous l'avez déjà dans un NSSet
et que vous ne voulez pas faire une autre demande de récupération, vous pouvez utiliser:
[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];
Cela créera un NSArray
intermédiaire lorsque vous appellerez allObjects
, puis un autre tableau trié par la suite, il n'est donc pas efficace à 100%, mais la surcharge devrait être négligeable pour les ensembles de données de taille raisonnable (et certainement moins que le coût du tri).
En fait, j'avais tort - NSSet a le sortedArrayUsingDescriptors:
méthode aussi. Vous pouvez donc simplement appeler [theSet sortedArrayUsingDescriptors:descriptors]
et tout faire en une seule fois.
Vous devez le trier vous-même, mais ce n'est pas très difficile ...
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sprocket" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortVariable" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
self.sprocketArray = mutableFetchResults;
[sortDescriptors release];
[sortDescriptor release];
[mutableFetchResults release];
[request release];