NSArray от NSSet - я должен отсортировать его сам?

У меня есть данные в NSSet, и я должен получить их в NSArray.

Я должен отсортировать его сам (снова, это прибыло из Базовых Данных), или я могу вывести его в отсортированном порядке?

32
задан Jeff 20 April 2010 в 04:47
поделиться

2 ответа

Вы можете указать сортировку при получении данных с помощью NSFetchRequest , установив для свойства sortDescriptors массив NSSortDescriptor s. Но если он у вас уже есть в NSSet и вы не хотите делать еще один запрос на выборку, вы можете использовать:

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

Он создаст промежуточный NSArray , когда вы вызовете allObjects , а затем еще один отсортированный массив, поэтому он не эффективен на 100%, но накладные расходы должны быть незначительными для наборов данных разумного размера (и, конечно, меньше, чем стоимость сортировки).

Edit

На самом деле я ошибался - NSSet также имеет метод sortedArrayUsingDescriptors: . Так что вы можете просто вызвать [theSet sortedArrayUsingDescriptors: descriptors] и сделать все за один раз.

77
ответ дан 27 November 2019 в 20:05
поделиться

Вы должны сами его отсортировать, но это не очень сложно ...

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];
8
ответ дан 27 November 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: