在iOS应用沙箱上获取本地文件的NSMetadataItem

Hua*_*ham 5 metadata sandbox foundation nsfilemanager nsmetadataquery

我知道在iOS上,您只能使用NSMetadataQueryiCloud文件。但是,根据Apple的指南,仍然可以NSMetadataItem通过使用以下命令手动搜索所需的文件来获得FileWrapper

iOS允许在iCloud中搜索元数据以查找与文件相对应的文件。它仅提供用于文件元数据查询NSMetadataQuery和的Objective-C界面,并且NSMetadataItem仅支持搜索iCloud的搜索范围。

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

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

如何NSMetadataItem在iOS应用沙箱上获取本地文件?

dou*_*Dai 0

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

metaDataQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope]

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