UIDocument openWithCompletionHandler:强制NSMetadataQuery更新

时间:2014-04-22 02:13:35

标签: ios objective-c macos cocoa core-data

我正在尝试使用iCloud,并且应用正在收听订阅NSMetadataQuery的{​​{1}}次更新。

当应用收到通知后,我使用NSMetadataQueryDidFinishGatheringNotification读取了一些iCloud UIDocument文件,但该调用导致openWithCompletionHandler:再次通知我更新,因此应用无限循环{{1 }}

NSMetadataQuery应该这样吗?我该怎么做才能防止它出现这样的循环?

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,而且看起来就像您问题的答案

  

openWithCompletionHandler应该这样吗?

是“是”。我可以假设,但这听起来很合理,当您执行openWithCompletionHandler:时,将在加载所有数据时调用该块。但是,使用NSMetadataQueryDidUpdateNotification可以跟踪下载进度(例如,在调用openWithHandler块之前数据加载的百分比)。

到目前为止,我的解决方案是:

  • 注意NSMetadataUbiquitousItemDownloadingStatusCurrent的通知更新
  • 我应该打开文档时
  • disableUpdate
  • 为文档打开块内的查询启用更新

由于事实是我的查询正在查看单个文件,因此我不怕丢失通知,在打开一个文档时可能会跳过这些通知。观看了多个文档可能不是这种情况,但是我不知道如何更好地解决它

答案 1 :(得分:0)

openWithCompletionHandler:应该这样吗?

这是不正确的。 NSMetadataQuery通知更新。它导致:

  • NSMetadataQueryDidUpdateNotification),表示iCloud更新数据(上传文件) 从沙箱到iCloud或从iCloud下载文件到沙箱)

  • 当您致电[_query startQuery]时,只需拨打NSMetadataQueryDidFinishGatheringNotification一个即可通知iCloud中的数据。之后,当数据更新NSMetadataQueryDidUpdateNotification

我认为这个圈子是正确的,因为当您从iCloud获得新数据时,您应该更新屏幕中的数据。

希望这些信息对您有所帮助。