3

为了监控我的 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 也没有多大帮助。

4

1 回答 1

4

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

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

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

于 2012-07-21T13:10:13.037 回答