文件夹iOS的NSMetadataQuery

问题描述 投票:0回答:1

我正在执行NSMetadataQuery,我获得了文件和目录的所有URL。

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的谓词?

ios swift
1个回答
0
投票

经过一番研究,我终于解决了我的问题。

我们假设我们有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])
© www.soinside.com 2019 - 2024. All rights reserved.