У меня есть данные в NSSet, и я должен получить их в NSArray.
Я должен отсортировать его сам (снова, это прибыло из Базовых Данных), или я могу вывести его в отсортированном порядке?
Вы можете указать сортировку при получении данных с помощью 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];