我需要osx 10.6.7+的解决方案。我试图解决在磁盘上搜索“旧”文件的问题。旧档案我指的是早一年的档案。我已经创建了NSPredicate,但是NSMetadataQuery什么也不返回
NSPredicate * fileTypePredicate = [NSPredicate predicateWithFormat: @"file_type == \"audio\""];
NSPredicate * accessDatePredicate = [NSPredicate predicateWithFormat: @"%K <= %@", @"kMDItemAccessedDates", timeYearBefore];
return [NSCompoundPredicate andPredicateWithSubpredicates: @[fileTypePredicate, accessDatePredicate]];我也没有使用kMDItemAccessedDates,而是使用了acess_date,但也没有成功。
发布于 2013-12-19 07:24:18
对于第一个问题,我不知道为什么要将“file_type”作为受支持的元数据属性。
项的内容类型有两个属性。一个是kMDItemContentType,它是项目内容的直接类型(通常由其文件扩展名确定)。另一个是kMDItemContentTypeTree,它是一个该类型的数组以及它的每个祖先。
要查找音频文件,需要查找kMDItemContentTypeTree与kUTTypeAudio相等的项。(是的,即使您确实希望测试数组是否包含类型,但等式测试也适用于此。在终端:mdfind 'kMDItemContentTypeTree == public.audio'上试一试)
在代码中,您应该使用一个双参数格式字符串,就像对第二个谓词一样,但使用==作为操作符:@"%K == %@"作为参数,传递kMDItemContentTypeTree (键)和kUTTypeAudio (在本例中是内容类型)。
至于第二个问题,我在其他任何地方都找不到kMDItemAccessedDates和exactly one other Stack Overflow question。我认为,这个问题的作者可能为他的自定义Spotlight导入器提供了一个关键;您不能期望在一个股票OS系统上找到它。
您可以尝试使用kMDItemLastUsedDate。(不要将它写成字符串文字,在@"…"-just中,kMDItemLastUsedDate中没有任何引号或前面有@。)
https://stackoverflow.com/questions/20654440
复制相似问题