苹果 code example建议观察NSMetadataQueryDidUpdateNotification用于检测 iCloud 中的变化,但每次 iCloud 交易都会触发多次。 每次 NSMetadataQueryDidUpdateNotification 触发时,他们的应用程序都会处理“fileListReceived”消息中的文件。
对于包含许多文档的应用程序,这不是一个理想的解决方案。
voromax建议 here更好的解决方案是观察 NSMetadataItem 的属性值。
谁能解释/展示/详细说明这是如何工作的,或者提供替代解决方案?
最佳答案
NSMetadataQuery 适用于观察 iCloud 文件容器中文件的出现或消失(即添加或删除)。虽然您认为通知可以经常触发是正确的,但它在您的应用程序中是否次优取决于您对返回数据的处理方式。该示例每次都会重新加载整个列表,但如果您需要处理大量可能经常更新的文档,您可以想出一种更复杂的方法,它只对更改进行操作。
为了观察容器中文档的(内容)变化(例如,如果它们是打开的并且你想用变化更新 UI),你需要结合元数据查询和观察你关心的每个文档的 UIDocumentStateChangedNotification在这种情况下。它会告诉您文档何时更新,您可以使用react - 更新 UI 等...
我相信您链接的问题是关于使用 KVO 跟踪单独返回的 NSMetadataItems 的属性,特别是下载状态,以确定文档何时从 iCloud 完成下载(或上传)。例如,这对于显示进度条很有用。这不是 UIDocumentStateChangedNotification 的良好替代品,但它可能是一个很好的赞美。为了真正拥有强大的 UIDocument/iCloud 实现,许多应用结合了所有这些方法来为用户提供最佳体验。
希望对您有所帮助。
关于ios - 如何观察 NSMetadataItem 的 iCloud 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224727/