看了苹果关于Spotlight的官方文档,根据官方目录,简单阐述以下几个问题:
1:What is Spotlight?
使用metadata来提供一种新的整理和获取电脑文件信息的方式,metadata可以包括文件的作者,或者修改时间,创建时间,关键字或者其他更多信息
2:Where Does Metadata Come From?
一些metadata的信息入时间,类型或者路径名是很简单通过文件能拿到的,一些文件的信息就镶嵌在了文件中,这就需要你提供一个Spotlight importer(一个插件),苹果本身提供了标注你的文件类型,例如RTF, JPEG, Mail, PDF and MP3等,如果你定义自己的文件就需要自己创建metadata importer才能用于Spotlight查询
3:Searching Metadata in your Applications
后面将会有实例
4:Not Only About Search
Spotlight不仅仅只作查询相关,还能提供更多文件相关的信息,例如图片的大小,像素,色彩等,电影的长度,以及更多信息
5:How Does Spotlight Work?
后台获取数据存储索引,当query开始,就开始查询索引匹配文件,如苹果官方图例:
然后开始匹配:指定查询的路径,查询的条件,或者返回时生成的组,排序等等
如果数据发生改变,那么Spotlight就会发送通知出来,程序根据查询结果也就能够立即作出响应
6:Security and Privacy Considerations
可以直接在设置中将不要Spotlight显示的添加进去
Spotlight简单使用
不说了,直接上最简单的例子
- (void)spotlightScan
{
self.query = [[[NSMetadataQuery alloc] init] autorelease];
//设置查找条件
NSPredicate *TypePredict = [NSPredicate predicateWithFormat:@"kMDItemContentTypeTree == 'com.apple.application-bundle'"];
self.query.predicate = TypePredict;
//设置查找路径
NSArray *paths = @[NSHomeDirectory()];
self.query.searchScopes = paths;
//添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(searchFinished:)
name:NSMetadataQueryDidFinishGatheringNotification
object:query];
//判断query
BOOL result =[query startQuery];
if (!result) {
//
}
}
- (void)searchFinished:(NSNotification *)noti
{
[query stopQuery];
for (NSMetadataItem *mdItem in self.query.results) {
// do something you wanna do
}
//move notification
[[NSNotificationCenter defaultCenter]removeObserver:self name:NSMetadataQueryDidFinishGatheringNotification object:query];
}