1
나는 NSMetadataQuery를 사용하여 아이 클라우드 드라이브의 특정 폴더의 내용을 나열하기 위해 노력하고있어 : NSMetadataQuery를 사용하여 iCloud Drive 폴더 검색을 개선하려면 어떻게해야합니까?
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
query.searchScopes = ["\(container)/Documents/Test/"]
query.searchItems = ["\(container)/Documents/Test/"]
을하지만 작동하지 않았다 :
은 내가searchScopes
설정 및/또는
searchItems
설정하여 바로 테스트 폴더로 검색 범위를 제한하려고 노력했다. 검색을 특정 폴더로 제한 할 수있는 방법이 있다면 알려주시겠습니까? 아니면 더 나은 검색 속도를 위해 사용할 수있는 다른 API가 있다면?
let queue = OperationQueue()
queue.qualityOfService = .background // If you want to speed up the query,
// try to set a higher QoS value
query.queue = queue
: 쿼리가 모든 CPU하는 것을 원하지 않는 경우 검색 UI를 동결 및 서비스의 낮은 품질을 설정하지 않도록