2012-07-05 119 views
2

为了监视我的iCloud容器文件中的变化,我已经报名为什么连续多次调用NSMetadataQueryDidUpdateNotification?

[[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也没有太大的帮助。

回答

3

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

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

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

+0

我认为“如何监控iCloud变化?”这个问题依然存在。 – 2013-03-05 08:20:33

相关问题