2012-07-05 4 views
2

Afin de surveiller les changements de fichiers dans mon conteneur iCloud, je me suis inscrit pourPourquoi NSMetadataQueryDidUpdateNotification est-il appelé plusieurs fois rapidement?

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

Idéalement, chaque fois que je reçois le message que les mises à jour ont été faites, je voudrais ouvrir chacun de mes UIDocs et contrôle si les paramètres ont été modifiés. Ce serait bien, si NSMetadataQueryDidUpdateNotification a été appelée seulement une fois. Cependant, il est lancé plusieurs fois (je n'ai pas oublié removeObserver etc. et j'ai plusieurs instances en cours d'exécution), et il serait donc très difficile de charger tous les fichiers à chaque fois que la notification de mise à jour est lancée (si j'avais 5 fichiers et cela s'appelle 4 fois, j'ouvrirais 20 UIDocs en succession rapide). Par exemple, cela se produit si je mettre à jour un fichier (et seulement un seul fichier dans mon conteneur omniprésent):

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 

est-il une autre façon de déterminer quand un fichier a changé? NSFileVersion n'a pas beaucoup aidé non plus.

Répondre

3

NSMetadataQueryDidUpdateNotification sort chaque fois que certains des attributs de NSMetadataItem dans NSMetadataQuery sont mis à jour. Il inclut le téléchargement partiel ou le téléchargement. Il est donc faux d'essayer d'ouvrir l'instance UIDocument pendant cette gestion des notifications. Au lieu de cela, vous pouvez déterminer le moment où le document a été téléchargé en observant les valeurs d'attribut NSMetadataItem, puis les mettre en file d'attente pour les ouvrir. N'oubliez pas de gérer également NSMetadataQueryDidFinishGatheringNotification. Il est affiché lorsque le destinataire a fini avec le résultat initial - phase de collecte de la requête

+0

Je pense que la question «Comment surveiller les changements dans l'iCloud? –

Questions connexes