我正在执行一个NSMetadataQuery,我正在获取文件和目录的所有网址。
func initSearchQuery(){
print("\(logClassName): initSearchQuery")
searchQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
let searchPredicate = NSPredicate.init(format: "%K like '*'", argumentArray: [NSMetadataItemFSNameKey])
searchQuery.predicate = searchPredicate
NotificationCenter.default.addObserver(self, selector: #selector(updateDataWithNotification), name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: searchQuery)
NotificationCenter.default.addObserver(self, selector: #selector(updateDataWithNotification), name: NSNotification.Name.NSMetadataQueryDidUpdate, object: searchQuery)
searchQuery.enableUpdates()
searchQuery.start()
}有没有办法做一个只给出目录的URL的谓词?
发布于 2018-03-05 20:31:15
经过一番研究,我终于解决了我的问题。
假设我们有iCloud文件夹的路径
var iCloudUrl = fileManager.url(forUbiquityContainerIdentifier: nil)
iCloudUrl = iCloudUrl.appendingPathComponent("Documents")现在,我们要在iCloud Documents文件夹中为folder1执行一次NSMetadataQuery。
我们可以像这样声明一个NSPredicate来访问内容:
let searchPredicate = NSPredicate.init(format: "%K BEGINSWITH %@", argumentArray: [NSMetadataItemPathKey,iCloudUrl.appendingPathComponent("Folder1").path])它将返回文件夹、文件和子文件夹的所有URL。
1)如果我们只想获取文件,那么NSPredicate将如下所示
let searchPredicate = NSPredicate.init(format: "%K BEGINSWITH %@ && NOT %K.pathExtension = ''", argumentArray: [NSMetadataItemPathKey,iCloudUrl.appendingPathComponent("Folder1").path,NSMetadataItemFSNameKey])2)如果我们想要计算它有多少文件夹和子文件夹,那么
let searchPredicate = NSPredicate.init(format: "%K BEGINSWITH %@ && %K.pathExtension = ''", argumentArray: [NSMetadataItemPathKey,iCloudUrl.appendingPathComponent("Folder1").path,NSMetadataItemFSNameKey])https://stackoverflow.com/questions/49066409
复制相似问题