看了蘋果關於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];
}