gpt4 book ai didi

swift3 - NSMetaDataQuery 未完成

转载 作者:行者123 更新时间:2023-12-05 03:09:23 27 4
gpt4 key购买 nike

我正在尝试使用 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 被调用,但 didFinishdidUpdate 从未被调用。如果我用 ====[cd] 替换谓词中的 like,我会得到相同的结果。将 NSMetadataQueryUbiquitousDocumentsScope 更改为 NSMetadataQueryUbiquitousDataScope 无效。我错过了什么?

同一个问题好像在这个论坛上已经提出过好几次了,但是我没有找到任何满意的答案。

最佳答案

我想我找到了原因。你的代码

let metaDataQuery = NSMetadataQuery()

这实际上使得元数据查询成为本地对象,它的生命周期在函数作用域内,并在函数结束时被销毁。那怎么行呢?请将其设为成员字段。

关于swift3 - NSMetaDataQuery 未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43131977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com