我需要osx 10.6.7+的解决方案。我试图解决在磁盘上搜索“旧”文件的问题。旧文件我的意思是1年前的文件。 我创建了NSPredicate,但NSMetadataQuery没有返回任何内容
NSPredicate * fileTypePredicate = [NSPredicate predicateWithFormat: @"file_type == \"audio\""];
NSPredicate * accessDatePredicate = [NSPredicate predicateWithFormat: @"%K <= %@", @"kMDItemAccessedDates", timeYearBefore];
return [NSCompoundPredicate andPredicateWithSubpredicates: @[fileTypePredicate, accessDatePredicate]];
我还使用了acess_date而没有成功,而不是kMDItemAccessedDates。
答案 0 :(得分:0)
对于第一个,我不知道为什么你希望“file_type”成为受支持的元数据属性。
项目的内容类型有两个属性。一个是kMDItemContentType
,它是项目内容的直接类型(通常由文件扩展名确定)。另一个是kMDItemContentTypeTree
,它是该类型的数组及其每个祖先。
要查找音频文件,您需要查找kMDItemContentTypeTree
等于kUTTypeAudio
的项目。 (是的,即使您真的想测试数组是否包含类型,否则相等测试将适用于此。在终端中尝试:mdfind 'kMDItemContentTypeTree == public.audio'
)
在您的代码中,您应该使用双参数格式字符串,就像您对第二个谓词一样,但使用==
作为运算符:@"%K == %@"
对于参数,传递{{1} (键)和kMDItemContentTypeTree
(值 - 在这种情况下,内容类型 - 您正在寻找)。
至于第二个问题,我在kUTTypeAudio
其他任何地方都找不到kMDItemAccessedDates
。我认为这个问题的作者可能已经为他的自定义Spotlight导入器做了关键;你不能指望在股票OS X系统上找到它。
您可以尝试使用kMDItemLastUsedDate
。 (不要在@"…"
中将其写成字符串文字 - 只要kMDItemLastUsedDate
没有任何引号或者前面有@。