2010-12-13 4 views
0

Вот мой ответ:Какао: Я могу сортировать по имени файла, как мне сортировать по расширению файла?

-(IBAction)sortBySelectedFilter { 
    ... 
    [self sortWithKey:@"filename" ascending:ascending selector:@selector(compareFileType:)]; 
    ... 
} 

-(void)sortWithKey:(NSString *)name ascending:(BOOL)asc selector:(SEL)sel { 
    NSSortDescriptor *byKey = [[[NSSortDescriptor alloc] initWithKey:name 
                  ascending:asc 
                  selector:sel] autorelease]; 
    self.fileNames = [NSMutableArray arrayWithArray:[self.fileNames sortedArrayUsingDescriptors:[NSArray arrayWithObject: byKey]]]; 
    ... 
} 

@interface NSString (FileExtension) 

- (NSComparisonResult)compareFileType:(NSString *)filename; 

@end 

#import "NSString+FileExtension.h" 

@implementation NSString (FileExtension) 

-(NSComparisonResult)compareFileType:(NSString *)filename { 
    return [[NSString stringWithFormat:@"%@, %@", [self pathExtension], [self stringByDeletingPathExtension]] 
      compare: 
      [NSString stringWithFormat:@"%@, %@", [filename pathExtension], [filename stringByDeletingPathExtension]]]; 
} 

@end 

ответ

1

Вы не упомянули ли вы используете Core Data или SQLite напрямую. С помощью Core Data вы можете использовать собственный подкласс NSManagedObject (не забудьте установить класс в модели управляемого объекта). Этот подкласс будет иметь метод расширения (NSString *), который запрашивает self для -valueForKey: @ "filename" и возвращает только расширение имени файла (используя метод NAPtring -pathExtension). Затем измените свой ключ сортировки на «расширение», и он должен работать.

Примечание: Если вы используете Core Data и тип хранилища SQLite, вы не сможете получить или иным образом запросить этот метод, поскольку он не существует как атрибут в вашем магазине.

Если вы не используете Core Data, я предполагаю, что ваш объект уже имеет свой собственный класс, поэтому должно быть очевидно, как добавить ваш метод -extension.

+0

Спасибо, Джошуа, ты избил меня, прежде чем я смог удалить это, я работаю в вакууме и нуждаюсь в пробеге. Я не использовал Core Data и нашел то, что мне нужно. –

Смежные вопросы