iphone - Cocoa:我可以按文件名排序,如何按文件扩展名排序?

标签 iphone objective-c cocoa

这是我的回答:

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

相关文章:

macos - 获取 NSStatusItem 框架更改的通知?

iphone - 苹果网站视差效果

iphone - 当我尝试 +2.50 时,NSString 四舍五入到最接近的整数

iphone - 修改此代码以支持另一种 View

iphone - 真的很奇怪 "[UIAccessibilityBundle setWhatever:]: unrecognized selector sent to instance 0xnnnnnnn"

objective-c - 重音不敏感的字符串比较?

iphone - iPhone 开发与 Symbian 开发相比如何?

ios - 如何根据设备屏幕尺寸转换框架?

iphone - 在运行时获取 iPhone/iPad/iPod Touch 的 ppi

macos - 如何使用 cocoa 在 OSX 应用程序中存储私有(private) Assets