2012-07-05 59 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

相關問題