Apples code example建议观察NSMetadataQueryDidUpdateNotification以检测iCloud中的更改,但每次iCloud交易会多次触发。 每次NSMetadataQueryDidUpdateNotification触发时,他们的应用程序都会处理“fileListReceived”消息中的文件。
对于包含大量文档的应用程序,这不是理想的解决方案。
voromax建议here更好的解决方案是观察NSMetadataItem的属性值。
任何人都可以解释/展示/详细说明这将如何运作,或提供替代解决方案吗?
答案 0 :(得分:2)
NSMetadataQuery适用于在iCloud文件容器中查看出现或消失的文件(即添加或删除)。虽然你的通知可以经常启动,但是你的应用中它是否是次优的,这取决于你对返回的数据做了什么。该示例每次都会重新加载整个列表,但如果您需要处理大量可能经常更新的文档,您可以提出一种更复杂的方法,只对更改进行操作。
要观察容器中文档的更改(对内容)(例如,如果它们是打开的,并且您希望通过更改来更新UI),则需要将元数据查询与观察UIDocumentStateChangedNotification结合使用您关注的每个文档在这种背景下。它将告诉您文档何时更新,您可以做出反应 - 更新UI等...
我认为您链接的问题是讨论使用KVO跟踪单个返回的NSMetadataItems的属性,特别是下载状态,以确定文档何时完成从iCloud下载(或上载)。例如,这对于显示进度条很有用。这不是UIDocumentStateChangedNotification的一个很好的替代品,但它可能是一个很好的赞美。为了真正拥有强大的UIDocument / iCloud实现,许多应用程序结合了所有这些方法,为用户提供最佳体验。
希望有所帮助。