这是我的回答:
-(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
最佳答案
您没有提到您是直接使用 Core Data 还是 SQLite。通过 Core Data,您可以使用自定义 NSManagedObject 子类(请记住在托管对象模型中设置该类)。该子类将有一个 -(NSString *)extension 方法,该方法向自身询问 -valueForKey:@"filename"并仅返回文件名的扩展名(使用 NSString 的 -pathExtension 方法)。然后将排序键更改为“扩展名”,它应该可以工作。
注意:如果您使用 Core Data 和 SQLite 存储类型,您将无法使用此方法获取或以其他方式查询,因为它并不真正作为属性存在在您的商店中。
如果您没有使用 Core Data,我假设您的对象已经有自己的类,因此如何添加您的 -extension 方法应该是显而易见的。
关于iphone - Cocoa:我可以按文件名排序,如何按文件扩展名排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432518/