Подтвердить что ты не робот

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

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

Нужно ли его сортировать самостоятельно (опять же, это произошло из Core Data), или я могу получить его в отсортированном порядке?

4b9b3361

Ответ 1

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

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

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

Изменить

Собственно, я ошибся - у NSSet есть метод sortedArrayUsingDescriptors:. Поэтому вы можете просто позвонить [theSet sortedArrayUsingDescriptors:descriptors] и сделать все за один раз.

Ответ 2

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

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];