我正在尝试使用 iCloud,一个应用正在监听 NSMetadataQuery
订阅 NSMetadataQueryDidFinishGatheringNotification
的更新。
当应用程序收到通知时,我使用 openWithCompletionHandler:
读取了一些 iCloud UIDocument
文件:但是该调用导致 NSMetadataQuery
再次通知我更新,并且所以应用进入无限循环 update > read > update > read > …
openWithCompletionHandler:
应该这样做吗?我能做些什么来防止它出现这种循环?
最佳答案
我也遇到过这个问题,好像是你问题的答案
Should openWithCompletionHandler: behave this way?
是"is"。我可以假设,但听起来很合理,当你执行 openWithCompletionHandler:
时, block 被调用,当所有数据都被加载时。但是,使用 NSMetadataQueryDidUpdateNotification
,您可以跟踪下载进度(例如,调用 openWithHandler block 之前的数据加载百分比)。
目前我的解决方案是:
- 观察
NSMetadataUbiquitousItemDownloadingStatusCurrent
的通知更新 - 在我想打开文档时禁用更新
- 启用文档打开 block 内查询的更新
由于我的查询正在监视单个文件,所以我不怕丢失通知,在打开一个文档时可能会跳过通知。如果看的是几个文件可能不是这样,但是不知道怎么解决比较好
关于ios - UIDocument openWithCompletionHandler : forces NSMetadataQuery to update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209208/