在iOS App Sandbox上获取本地文件的NSMetadataItem

时间:2017-06-24 16:57:50

标签: metadata sandbox nsfilemanager foundation nsmetadataquery

我知道在iOS上,您只能将NSMetadataItem用于iCloud文件。但是,根据Apple的guide,您仍然可以通过FileWrapper手动搜索所需文件来获取NSMetadataQuery

  

iOS允许在iCloud中进行元数据搜索,以查找相应文件的文件。它仅提供文件元数据查询的Objective-C接口NSMetadataItemNSFileManager,并且仅支持搜索iCloud的搜索范围。

     

与桌面不同,iOS应用程序的沙箱无法使用元数据类进行搜索。要搜索应用程序的沙箱,您需要使用NSMedatataItem类以递归方式遍历沙箱文件系统中的文件。找到匹配的文件后,您可以按照所需的方式访问该文件。您还可以使用NSMetadataItem类来检索该特定文件的元数据。

但是,我找不到从iOS沙箱上的本地文件获取NSMetadataItem的方法。您可以从文件URL初始化FileManager,但仅在macOS上可用。 NSMetadataItem似乎也没有用于从中检索NSMetadataItem的API。

如何在iOS App Sandbox上获取{{1}}本地文件?

1 个答案:

答案 0 :(得分:0)

使用NSMetadataQuery查询iCloud文件,添加观察者以获取通知。

metaDataQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope]

NotificationCenter.default.addObserver(self, selector: #selector(self.metadataQueryDidFinishGathering),
name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: metaDataQuery)
metaDataQuery.start()
func metadataQueryDidFinishGathering(notification: NSNotification) {
    let result: [NSMedatataItem] = (notification.object as! NSMetadataQuery).results as! [NSMedatataItem]
    // handle result
}