【发布时间】:2017-08-25 05:04:51
【问题描述】:
我正在尝试使用 NSMetaDataQuery 在 iCloud 中探索我的应用程序可用的文件。我可以开始查询,但它永远不会完成。这是我的代码。
func report1() {
let filemgr = FileManager.default
let url = filemgr.url(forUbiquityContainerIdentifier: nil)
guard url != nil else {
print("url is nil")
return
}
let metaDataQuery = NSMetadataQuery()
metaDataQuery.predicate =
NSPredicate(format: "%K like '*'", NSMetadataItemFSNameKey)
metaDataQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
NotificationCenter.default.addObserver(self,
selector: #selector(didFinish),
name: NSNotification.Name.NSMetadataQueryDidFinishGathering,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(didStart),
name: NSNotification.Name.NSMetadataQueryDidStartGathering,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(didUpdate),
name: NSNotification.Name.NSMetadataQueryDidUpdate,
object: nil)
let result = metaDataQuery.start()
print("metaDataQuery.start() returned \(result)")
}
@objc func didStart(notification: NSNotification) {
let query: NSMetadataQuery = notification.object as! NSMetadataQuery
print("didStart found \(query.results.count) items")
}
@objc func didFinish(notification: NSNotification) {
print("didFinish")
}
@objc func didUpdate(notification: NSNotification) {
print("didUpdate")
}
这将打印以下内容:
didStart found 0 items
metaDataQuery.start() returned true
didStart 被调用,但 didFinish 和 didUpdate 从未被调用。如果我将谓词中的like 替换为== 或==[cd],我会得到相同的结果。将 NSMetadataQueryUbiquitousDocumentsScope 更改为 NSMetadataQueryUbiquitousDataScope 无效。我错过了什么?
同样的问题好像已经在这个论坛上提出过好几次了,但是我没有找到任何满意的答案。
【问题讨论】:
标签: swift3 icloud nsmetadataquery