Сортировка NSMutableDictionary с помощью sortOrder - PullRequest
0 голосов
/ 19 марта 2012

Для секционированного табличного просмотра мне нужно отсортировать мои книги по category.sortOrder

    NSMutableDictionary *theDictionary = [NSMutableDictionary dictionary];
    for (Book *object in self.books) {            
        NSMutableArray *theMutableArray = [theDictionary objectForKey:object.category.categoryName];
        if ( theMutableArray == nil ) {
            theMutableArray = [NSMutableArray array];
            [theDictionary setObject:theMutableArray forKey:object.category.categoryName];
        }
        [theMutableArray addObject:object];
    }
    self.sections = [[theDictionary allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Как я могу включить значение category.sortOrder в свой словарь, чтобы я мог правильно сортировать свои секции?

1 Ответ

1 голос
/ 19 марта 2012

Для ясности вы должны создать класс для хранения значений для каждого раздела, а затем добавить их в свой словарь.Вы можете сделать все это в вашем контроллере, если вам не нужен дополнительный файл, но вы также можете создать другой файл, если хотите:

@interface TableSection
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *order;
@property (nonatomic, retain) NSArray *objects;
@end

@implementation TableSection
@synthesize name;
@synthesize order;
@synthesize objects;
@end


NSMutableDictionary *sections = [NSMutableDictionary dictionary];
for (Book *object in self.books) {
    TableSection *section = [categories objectForKey:object.category.categoryName];
    if ( section == nil ) {
        section = [[TableSection alloc] init];
        section.name = object.category.categoryName;
        section.order = object.category.sortOrder;
        section.objects = [NSMutableArray array];
        [sections setObject:section forKey:object.category.categoryName];

    }
    [(NSMutableArray *)section.objects addObject:object];
}
self.sections = [[categories allValues] sortUsingDescriptors:
                 [NSArray arrayWithObject:
                  [NSSortDescriptor descriptorWithKey:@"order" ascending:YES]]];
...