2013-08-23 3 views
0

У меня есть данные в таблице сообщений. Эти сообщения - это своего рода чат-сообщения. Теперь я хочу получить данные в виде таких цепочек ...Извлечь сгруппированные данные из данных ядра

Предположим, у нас есть a, b, c, d, e, f и m пользователей. m для меня. Теперь есть сообщения, имеющие отправителей от a, b, c, d, e, f и m и то же самое для приемника. Все сообщения имеют m в качестве отправителя или получателя и одного объекта от других пользователей. Теперь я хочу, чтобы данные были сгруппированы ..

Groupe

Все сообщения, имеющие сообщения, отправленные на или полученные от в

Groupe B

Все сообщения, отправленные на адрес b или полученные от b

Groupe C

Все сообщения, имеющие сообщения, отправленные на с или получил от гр

и так далее ....

Может ли один предложить как Я могу это сделать. Я рассмотрел некоторые вопросы, но не смог найти ответ. Любой, кто там поможет, будет заметным.

+0

Вам нужны все данные группы A, B, C ... в одном отсортированном массиве? – CodenameLambda1

+0

Я хочу сделать только один запрос, а затем данные должны быть сгруппированы. В одиночном массиве он будет только отсортирован.И мне нужны объекты массивов – Saad

+0

Array A содержит группу A и Array B содержит группу B и т. Д. – Saad

ответ

1

Используя Контроллер Полученных результатов, вы должны учитывать, что некоторые сообщения будут включены более одного раза.

1) Выборка User объект, сортировать по name

2) Количество секций: fetchedObjects.count

3) Количество строк в разделе:

NSSet *allMessages = [user.receivedMessages setByAddingObjectsFromSet:user.sentMessages]; 
return allMessages.count; 

4) Заполнение ячейки:

NSSet *allMessages = [user.receivedMessages setByAddingObjectsFromSet:user.sentMessages]; 
NSArray *sorted = [allMessages sortedArrayUsingDescriptors:@[[NSSortDescriptor 
      sortDescriptorWithKey:@"message.topic" ascending:YES]]]; 
Message *m = sorted[indexPath.row]; 

Это может быть просто ified, добавив свойство переходного процесса к User, который возвращает отсортированный allMessages. Пожалуйста, не делайте это прямо в методах данных, не очень эффективно, я просто помещу его здесь, чтобы проиллюстрировать суть.

-1

Вы можете использовать NSFetchedresultscontroller, если он находится в viewController. Этот Объект содержит раздел и строку в данных результата

+0

ОК, покажите нам свой 'sectionNameKeyPath'. – Mundi

+0

[[NSFetchedResultsController alloc] initWithFetchRequest: managedObjectContext: <Ваш NSManagedObjectContext> sectionNameKeyPath: @ "sectionKeyPath" cacheName: nil]; sectionKeyPath может быть «переходный» атрибут в CoreData, и вы можете вычислить его значение в Getter оценщиком - (NSString *) sectionKeyPath { // В peusdo код возвращающие если отправитель или получили } – tdelepine

+0

Это не сработает. Чтобы выполнить переходный атрибут, вам нужно будет получать сообщения и заканчивать с неправильным количеством строк в каждом разделе из-за дубликатов. – Mundi