我正在尝试使用iCloud,并且应用正在收听订阅NSMetadataQuery
的{{1}}次更新。
当应用收到通知后,我使用NSMetadataQueryDidFinishGatheringNotification
读取了一些iCloud UIDocument
文件,但该调用导致openWithCompletionHandler:
再次通知我更新,因此应用无限循环{{1 }}
NSMetadataQuery
应该这样吗?我该怎么做才能防止它出现这样的循环?
答案 0 :(得分:1)
我也遇到了这个问题,而且看起来就像您问题的答案
openWithCompletionHandler应该这样吗?
是“是”。我可以假设,但这听起来很合理,当您执行openWithCompletionHandler:
时,将在加载所有数据时调用该块。但是,使用NSMetadataQueryDidUpdateNotification
可以跟踪下载进度(例如,在调用openWithHandler块之前数据加载的百分比)。
到目前为止,我的解决方案是:
NSMetadataUbiquitousItemDownloadingStatusCurrent
的通知更新由于事实是我的查询正在查看单个文件,因此我不怕丢失通知,在打开一个文档时可能会跳过这些通知。观看了多个文档可能不是这种情况,但是我不知道如何更好地解决它
答案 1 :(得分:0)
openWithCompletionHandler
:应该这样吗?
这是不正确的。 NSMetadataQuery
通知更新。它导致:
(NSMetadataQueryDidUpdateNotification
),表示iCloud更新数据(上传文件)
从沙箱到iCloud或从iCloud下载文件到沙箱)
当您致电[_query startQuery]
时,只需拨打NSMetadataQueryDidFinishGatheringNotification
一个即可通知iCloud中的数据。之后,当数据更新NSMetadataQueryDidUpdateNotification
我认为这个圈子是正确的,因为当您从iCloud获得新数据时,您应该更新屏幕中的数据。
希望这些信息对您有所帮助。