У меня есть данные в NSSet, и мне нужно получить его в NSArray.
Нужно ли его сортировать самостоятельно (опять же, это произошло из Core Data), или я могу получить его в отсортированном порядке?
У меня есть данные в NSSet, и мне нужно получить его в NSArray.
Нужно ли его сортировать самостоятельно (опять же, это произошло из Core Data), или я могу получить его в отсортированном порядке?
Вы можете указать сортировку при извлечении данных с помощью NSFetchRequest
, установив свойство sortDescriptors
в массив NSSortDescriptor
s. Но если вы уже имеете его в NSSet
и не хотите делать другой запрос на выборку, вы можете использовать:
[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];
Он будет создавать промежуточный NSArray
при вызове allObjects
, а затем другой отсортированный массив, поэтому он не будет на 100% эффективнее, но накладные расходы должны быть незначительными для наборов данных разумного размера (и, конечно, стоимость сортировки).
Собственно, я ошибся - у NSSet есть метод sortedArrayUsingDescriptors:
. Поэтому вы можете просто позвонить [theSet sortedArrayUsingDescriptors:descriptors]
и сделать все за один раз.
Вы должны отсортировать его самостоятельно, но это не очень сложно...
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];