文件夹iOS的NSMetadataQuery

时间:2018-03-02 09:37:38

标签: ios swift

我正在执行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的谓词?

1 个答案:

答案 0 :(得分: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])