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