以下是我的回答:
-(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
答案 0 :(得分:1)
您尚未提及是否直接使用Core Data或SQLite。使用Core Data,您可以使用自定义NSManagedObject子类(请记住在托管对象模型中设置类)。这个子类有一个 - (NSString *)扩展方法,它要求self -valueForKey:@“filename”并只返回文件名的扩展名(使用NSString的-pathExtension方法)。然后将您的排序键更改为“扩展名”,它应该工作。
注意:如果您使用的是Core Data和SQLite商店类型,则无法使用此方法获取或以其他方式进行查询,因为它并不真正作为属性存在在你的商店里。
如果您没有使用Core Data,我认为您的对象已经拥有自己的类,因此应该明白如何添加-extension方法。