为什么连续多次调用NSMetadataQueryDidUpdateNotification?

为了监视我的iCloud容器中的文件更改,我已经注册

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processiCloudUpdates:) name:NSMetadataQueryDidUpdateNotification object:nil]; 

理想情况下,每当我收到更新消息时,我想打开每个UIDocs并检查设置是否已更改。 如果NSMetadataQueryDidUpdateNotification只被调用一次,这将很好。 但是,它被激发了好几次(我没有忘记removeObserver等,有几个实例正在运行),因此,每次更新通知被触发时,加载所有文件是非常不切实际的(如果我有5个文件这被称为4次,我会连续打开20个UIDocs)。 例如,如果我更新一个文件(在我的无处不在的容器中只有一个文件),会发生这种情况:

 2012-07-05 10:51:39.565 Meernotes[7842:707] ... NSMetadataQuery update 2012-07-05 10:51:42.468 Meernotes[7842:707] ... NSMetadataQuery update 2012-07-05 10:51:45.216 Meernotes[7842:707] ... NSMetadataQuery update 2012-07-05 10:51:47.036 Meernotes[7842:707] ... NSMetadataQuery update 

有没有其他方法来确定文件何时更改? NSFileVersion也没有太大的帮助。

NSMetadataQueryDidUpdateNotification NSMetadataQuery结果中的任何NSMetadataItem某些属性更新时, NSMetadataQueryDidUpdateNotification问题。 它包括部分上传或下载进度。 因此,在此通知处理期间尝试打开UIDocument实例是错误的。

相反,您可以通过观察NSMetadataItem的属性值,然后排队打开来确定文档的下载时间。

不要忘记处理NSMetadataQueryDidFinishGatheringNotification 。 它在接收者完成查询的初始结果收集阶段时发布