Ich versuche, den Inhalt eines bestimmten Ordners in iCloud-Laufwerk mit NSMetadataQuery zur Liste:Wie kann ich die Suche in einem iCloud Drive-Ordner mithilfe von NSMetadataQuery verbessern?
let query = NSMetadataQuery()
func listAllItemsInTheTestFolder() {
guard let container = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.path else {return}
NotificationCenter.default.addObserver(self, selector: #selector(didFinishGathering), name: .NSMetadataQueryDidFinishGathering, object: query)
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.predicate = NSPredicate(format: "%K BEGINSWITH %@", NSMetadataItemPathKey, "\(container)/Documents/Test/")
query.start()
}
// The issue is that it's taking close to a min and a spike in cpu usage when there are more than 10K items in the container.
// Do note: The folder I'm interested in has less than five items.
@objc func didFinishGathering() {
query.stop()
NotificationCenter.default.removeObserver(self, name: .NSMetadataQueryDidFinishGathering, object: query)
let names = query.results.map{($0 as? NSMetadataItem)?.value(forAttribute: NSMetadataItemDisplayNameKey)}
print("Count: ", query.resultCount, "names: ", names) // Expected
}
query.results
alle Einzelteile Ich erwarte hat. Wenn die Anzahl der Elemente im Cloud-Container der App jedoch groß ist (> 10 KB), dauert es sehr lange und verwendet ~ 100% der CPU für fast eine Minute.
Ich habe versucht, den Suchbereich nur die Testordner zu begrenzen, indem die searchScopes
Einstellung und/oder die searchItems
Einstellung:
query.searchScopes = ["\(container)/Documents/Test/"]
query.searchItems = ["\(container)/Documents/Test/"]
Aber habe nicht funktioniert. Bitte lassen Sie mich wissen, ob es eine Möglichkeit gibt, die Suche auf einen bestimmten Ordner zu beschränken? Oder wenn es eine andere API gibt, die ich für bessere Suchgeschwindigkeit verwenden kann?