NSMutableArray сортировка - PullRequest
       3

NSMutableArray сортировка

0 голосов
/ 27 января 2012

enter image description here

У меня есть 5 NSMutableArrays в ячейке. Мне нужно отсортировать ячейки по одному значению. Пример мне нужно отсортировать ячейку по времени.

[MyArray1 sortUsingSelector:@selector(compare:)];

а как я буду с другими 4 NSMutableArray в ячейке?

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Не рекомендуется хранить данные для ваших ячеек в 5 массивах, не разделяйте их;создайте класс контейнера данных, сохраните все значения для каждой ячейки внутри одного объекта контейнера данных, а затем вы можете отсортировать массив с контейнерами данных по одному из значений.

например:

DataContainer.h:

@interface DataContainer : NSObject
{
    NSDate *date1;
    NSDate *date2;
    NSString *upperTitle;
    NSString *mainTitle;
    NSString *subtitle;
}

@property (nonatomic, strong) NSDate *date1;
@property (nonatomic, strong) NSDate *date2;
@property (nonatomic, strong) NSString *upperTitle;
@property (nonatomic, strong) NSString *mainTitle;
@property (nonatomic, strong) NSString *subtitle;

@end

DataContainer.m:

@implementation DataContainer
@synthesize date1, date2, upperTitle, mainTitle, subtitle;
@end

Затем вы можете создать свои DataContainer (по одному для каждой ячейки) и сохранить их в one NSMutableArray.

например:

DataContainer *container = [[DataContainer alloc] init];
[container setDate1:[NSDate date]];
[container setMainTitle:@"blahblah"];
///...
[cellArr addObject:container];

Чтобы отсортировать этот массив, используйте:

cellArr = [cellArr sortedArrayUsingComparator:^(id cont1, id cont2) {
                return [[(DataContainer *) cont1 date1] compare:[(DataContainer *) cont2 date1]];
            }];

, а затем используйте их в своем cellForRowAtIndexPath:

DataContainer *container = [cellArr objectAtIndex:indexPath.row];
//container.date1, container.date2, container.upperTitle, container.mainTitle and container.subtitle are the values that you need for your cell.

Обратите внимание, что этот код подходит, если вы используете ARC (автоматический подсчет ссылок) для своего проекта;если вы не используете ARC, вам нужно изменить strong на retain в определениях свойств и добавить release в необходимые места, чтобы избежать утечек памяти.

1 голос
/ 27 января 2012

Я согласен с Андреем.Вы кладете все из своих массивов в контейнеры, а затем сортируете контейнеры.Ваш контейнер должен иметь в качестве членов все, что вы храните в одной ячейке (дата, время, текст, текст2, английский / математический и т. Д.).

И затем вы сортируете массив контейнера ячеек.

            cellArr = [cellArr sortedArrayUsingComparator:^(id cont1, id cont2) {
                // if date in container 1 is earlier than in container 2
                return (NSComparisonResult)NSOrderedDescending;
                // if date is later
                return (NSComparisonResult)NSOrderedAscending;
                // if none of the above
                return (NSComparisonResult)NSOrderedSame;
            }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...