2010-12-13 4 views
0

Hier ist meine Antwort:Cocoa: Ich kann nach Dateiname sortieren, wie sortiere ich nach Dateiendung?

-(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 

Antwort

1

Sie haben nicht erwähnt, ob Sie direkt Core Data oder SQLite verwenden. Mit Core Data können Sie eine benutzerdefinierte NSManagedObject-Unterklasse verwenden (denken Sie daran, die Klasse im Managed Object Model festzulegen). Diese Unterklasse hätte eine Erweiterungsmethode - (NSString *), die self nach -valueForKey fragt: @ "Dateiname" und gibt nur die Erweiterung des Dateinamens zurück (mit der Methode -pathExtension von NSString). Dann ändern Sie Ihren Sortierschlüssel in "Erweiterung" und es sollte funktionieren.

Hinweis: Wenn Sie Core Data und den SQLite-Speichertyp verwenden, können Sie diese Methode nicht abrufen oder auf andere Weise abfragen, da sie nicht wirklich als Attribut in Ihrem Geschäft existiert.

Wenn Sie keine Core-Daten verwenden, nehme ich an, dass Ihr Objekt bereits eine eigene Klasse besitzt. Daher sollte es offensichtlich sein, wie Sie die Methode -extension hinzufügen.

+0

Dank Joshua, du hast mich geschlagen, bevor ich das löschen konnte, ich arbeite in einem Vakuum und brauchte ein Joggen. Ich habe keine Kerndaten verwendet und gefunden, was ich brauchte. –

Verwandte Themen