2012-06-04 28 views
2

我試圖通過使用NSMetadataQuery訪問存儲在應用程序的文檔目錄中的一些文件,但NSMetadataQueryDidFinishGatheringNotification不通知我的應用程序。我發現this question,但答案是讓NSMetadataQuery成爲伊娃,我已經這樣做了。NSMetadataQuery完成後(或未完成)不發送通知

下面是我使用的代碼:

self.query = [[NSMetadataQuery alloc] init]; 
[self.query setSearchScopes:[NSArray arrayWithObject:documentsDirectoryURL]]; 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K ENDSWITH '_task'", NSMetadataItemFSNameKey]; 
[self.query setPredicate:pred]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:self.query]; 

[self.query enableUpdates]; 

[self.query startQuery]; 

感謝您的幫助!

回答

5

這是從蘋果的文件,「關於文件的元數據查詢」:

iOS的允許範圍內的iCloud元數據搜索,找到相應的文件的文件。它僅提供文件元數據查詢,NSMetadataQuery和NSMetadataItem的Objective-C接口,以及僅支持搜索iCloud的搜索範圍。

與桌面不同,iOS應用程序的沙盒不能使用元數據類進行搜索。爲了搜索應用程序的沙箱,您需要使用NSFileManager類遞歸地遍歷沙盒文件系統中的文件。一旦找到匹配的文件或文件,您可以按照您需要的方式訪問該文件。您也可以使用NSMedatataItem類來檢索該特定文件的元數據。

所以,你必須改用NSFileManager。