如何强制使用 NSPredicate 从硬盘检索图像的特定顺序

Posted

技术标签:

【中文标题】如何强制使用 NSPredicate 从硬盘检索图像的特定顺序【英文标题】:How to force a specific order for retrieving the images from the hard disk using NSPredicate 【发布时间】:2019-11-05 08:44:21 【问题描述】:

如何强制从硬盘中检索文件的特定顺序,给定以下代码并且硬盘中的文件是图像。 如何修改下面的代码,以便即使硬盘中的顺序由于排序问题而发生变化,图像的检索也必须遵循特定的顺序,例如,现在 HD 中的文件按名称排序..few seconds早些时候排序更改为通过日期或其他方式。

换句话说,如何以编程方式强制文件的检索始终按字母顺序或任何其他条件进行

代码

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];
NSString *pred = [NSString stringWithFormat:@"SOME TEXT 'iconxxx%@x.png' ", acx];
NSPredicate *fltr = [NSPredicate predicateWithFormat:pred];
NSArray *onlys = [dirContents filteredArrayUsingPredicate:fltr];

【问题讨论】:

"如果命令在硬盘中"没有命令。它就像一个键/值顺序,就像一个字典。如果您考虑一下,它是路径,您不能有两个具有相同路径的文件。你会覆盖它。您自己选择如何订购。按字母顺序等。 @Larme thx 请你重新阅读这个问题,我修改了它 参见contentsOfDirectoryAtPath:error:“返回数组中文件的顺序未定义。”。硬盘上的文件不按名称或日期排序。 Finder 应用程序对文件进行排序。 按照相同的逻辑对自己进行排序。 【参考方案1】:

NSFilemanager 不负责对文件列表进行排序。使用谓词过滤后,您只需对数组进行排序。通常使用localizedStandardCompare 像 Finder 或任何其他文件管理器一样进行排序。

// sort the filtered array
NSArray *sorted = [onlys sortedArrayUsingSelector:@selector(localizedStandardCompare:)];

【讨论】:

以上是关于如何强制使用 NSPredicate 从硬盘检索图像的特定顺序的主要内容,如果未能解决你的问题,请参考以下文章

保存核心数据相关数据并使用具有多个实体的 NSPredicate 和 NSFetchedResultsController 检索

如何序列化 NSPredicate 对象?

一个可以递归遍历对象图的 NSPredicate?

NSPredicate 检索在 1:n 关系中属性不为 NIL 的所有对象

Core Data 使用类似于 BEGINSWITH 的东西为 NSNumber 创建 NSPredicate

如何使用 NSPredicate 从数组中选择确切的短语?