0

только маленький вопрос:Как отсортировать реляционные данные?

У меня есть объект X с ко-многим отношению к Entity Y

В методе viewDidLoad Принести все X и отсортировать их по имени и по возрастанию, и они отображаются в Tableview.

Если вы выберете один из Xs в tableView, все реляционные Y будут показаны во втором tableView. Результат этой выборки также включает все реляционные Y's для каждого X, поэтому мне не нужно делать дополнительную выборку для Y's - но это приводит к моей проблеме: Y's находятся в полностью случайном порядке (который также изменяется с каждым перезапуском приложения), но я хочу, чтобы они отсортировались по дате (< - атрибут в Y Entity) ... как я могу это сделать?

Heres выборки - код

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 

NSError *error = nil; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
if (mutableFetchResults == nil) { 
    // Handle the error. 
} 

[self setCustomersArray:mutableFetchResults]; 

и результат выглядит примерно так:

Entity X-1 
attribute-x-1 
attribute-x-2 
relation-attribute 
    relation-entity-y-1 
    attribute-y-1 
    attribute-y-2 
    relation-entity-y-1 
    attribute-y-1 
    attribute-y-2 
Entity X-2 
attribute-x-1 
attribute-x-2 
relation-attribute 
    relation-entity-y-1 
    attribute-y-1 
    attribute-y-2 

возможно Thats в лучший пример:

Customer 
name: Bert 
age: 10 
customerMeasureRealtions 
    Measure 
    score: 5 
    date: 10.10.2010 
    Measure 
    score: 9 
    date: 20.20.2000 
Customer 
name: Steve 
age: 20 
customerMeasureRealtions 
    Measure 
    score: 7 
    date: 07.07.2007 

после извлекающих «клиенты "сортируются по" имени ". Но если я получаю доступ к «Меры» через «Клиент», порядок «Меры» является случайным, но я хочу, чтобы они отсортировались по «дате».

код для доступа к мерам («клиент» является Клиент-Entity-объекта или модели), («measuresForCustomer» является customerMeasureRealtions):

- (void)loadMeasureDataForCustomer:(Customer *)customer 
{ 
NSSet *customerSet = customer.measuresForCustomer; 
measuresArray = [NSMutableArray arrayWithArray:[customerSet allObjects]]; 
[measuresTable reloadData]; 
} 
+0

больше код пожалуйста. А что такое «дпо»? –

+0

dpo = do;) я добавил некоторую информацию/код – jacksbox

+0

Хорошо, вы можете показать нам какой-то код, как вы получаете доступ к Меры? –

ответ

0

Я думаю, что есть два способа, вы могли бы сделайте это:

  1. Инициируйте второй запрос на свой дБ и выберите «меры» для данного Клиента. Посмотрите на Core data, sorting one-to-many child objects.
  2. Передача NSSet в NSArray и сортировка его на месте. NSSet всегда неупорядочен. Посмотрите на How to sort a NSArray alphabetically?. Или документация Apple: sortedArrayUsingDescriptors в сочетании с NSSortDescriptor.
+0

отлично! Я использовал первый подход, потому что считаю, что сортировка по дате проще с помощью основных данных. большое спасибо XD – jacksbox

0

Используйте один из методов сортировки NSSet.

Try:

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors 

Или, если вы получите ваш NSArray от вашего NSSet, вы затем целый ряд методов сортировки на NSArray, чтобы выбрать из:

Sorting 
– sortedArrayHint 
– sortedArrayUsingFunction:context: 
– sortedArrayUsingFunction:context:hint: 
– sortedArrayUsingDescriptors: 
– sortedArrayUsingSelector: 
– sortedArrayUsingComparator: 
– sortedArrayWithOptions:usingComparator: 

Они приходят из NSArray и документы API NSSet.