2012-03-08 3 views
2

Le démon iCloud semble télécharger les modifications en quelques secondes sur le serveur iCloud lorsque des modifications sont effectuées lorsque le périphérique est en ligne. Cependant, j'ai remarqué que lorsque les modifications sont effectuées hors ligne vers le conteneur iCloud local et que le périphérique est mis en ligne, le démon iCloud est inconsistant sur le moment où il télécharge les modifications. Après avoir rétabli une connexion, j'ai des retards entre quelques secondes et 30 minutes avant que les modifications ne soient téléchargées sur le serveur iCloud et détectées par d'autres périphériques. Est-ce normal? Un moyen de dire au démon iCloud de forcer le téléchargement?Démon iCloud lent à télécharger les modifications effectuées hors connexion

Je n'utilise qu'une sous-classe de UIDocument (pour créer, ouvrir, modifier, enregistrer un fichier dans le conteneur iCloud) et NSMetadataQuery pour détecter les modifications. Après être revenu en ligne, l'état du fichier pour la clé NSURLUbiquitousItemIsUploadedKey est faux et peut rester ainsi longtemps. J'ai essayé de réenregistrer le fichier pour essayer de forcer le démon iCloud à télécharger le changement mais cela ne semble pas aider.

+0

Je vois quelque chose de similaire. Dans mon cas, cela ne semble pas lié au fait que les changements ont été faits hors ligne ou non. Je viens d'entrer dans un état où NSURLUbiquitousItemIsUploadedKey reste FAUX pendant une période de temps prolongée. Si je redémarre l'appareil, les modifications sont téléchargées. Mais d'autres changements, encore une fois, ne sont pas poussés à iCloud. À d'autres moments, le même code télécharge immédiatement les modifications. – Poulsbo

Répondre

0

Je sais que c'est un ancien, mais je souffre de ce problème depuis longtemps et je viens juste de découvrir pourquoi, alors au hasard quelqu'un d'autre rencontre ce fil, le voici ...

Si vous utilisez la méthode getResourceValue:forKey:error: de NSURL, que je suppose que vous êtes parce que vous avez mentionné en utilisant NSURLUbiquitousItemIsUploadedKey, vous pouvez voir les fichiers apparemment pas parce que le téléchargement NSURL caches la valeur des ressources dans des circonstances très particulières.

mentionné nulle part dans les documents principaux, mais si vous plongez dans NSURL.h, vous trouverez les éléments suivants gem curieusement phrasé, ce qui mérite d'être lu intégralement à laisser les implications enfoncent:

Le comportement de la mise en cache des ressources est légèrement différente entre l'API NSURL et CFURL.

Lorsque les méthodes de NSURL qui reçoivent, ensemble, ou l'utilisation des ressources en cache les valeurs sont utilisées à partir du thread principal, les valeurs des ressources mises en cache par l'URL (sauf ceux qui sont ajoutés en tant que propriétés temporaires) sont invalidés la prochaine temps de fil conducteur exécuter la boucle s'exécute.

Les fonctions CFURL n'effacent pas automatiquement les valeurs de ressource mises en cache par l'URL. Le client a un contrôle complet sur le cache durée de vie. Si vous utilisez l'API CFURL, vous devez utiliser CFURLClearResourcePropertyCacheForKey ou CFURLClearResourcePropertyCache pour effacer les valeurs de ressources mises en cache.

Renvoie la valeur de ressource identifiée par une clé de ressource donnée. Cette méthode vérifie d'abord si l'objet URL met déjà en cache la valeur de la ressource. Si c'est le cas, il renvoie la valeur de la ressource mise en cache à l'appelant. Si pas, puis cette méthode obtient de manière synchrone la valeur de ressource de le magasin de sauvegarde, ajoute la valeur de ressource au cache de l'objet URL, et renvoie la valeur de ressource à l'appelant. Le type de la valeur de la ressource varie en fonction de la propriété de ressource (voir définitions des clés de ressource). Si cette méthode renvoie OUI et la valeur est remplie avec zéro, cela signifie que la propriété de ressource n'est pas disponible pour la ressource spécifiée et aucune erreur s'est produite lors de la détermination de la propriété de ressource n'était pas disponible. Si cette méthode renvoie NO, l'erreur facultative est renseignée. Cette méthode est actuellement applicable uniquement aux URL pour les ressources du système de fichiers .Le symbole est présent dans iOS 4, mais n'effectue aucune opération.

Fondamentalement, si vous utilisez getResourceValue: sur tout autre thread que le thread principal il cache le premier résultat, et le retour ce même résultat à temps et encore. Intuitif, hein? Le genre de chose que vous pensez sera signalé en gros caractères gras dans les docs, plutôt que enterré dans l'en-tête ...

Pour moi, cela se manifeste comme des périphériques parfois «coller» car ils pensaient qu'une URL particulière wasn ' t le téléchargement, alors qu'en réalité il l'avait fait, il y a longtemps. Relancer l'application souvent est apparu pour résoudre le problème. Forcer getResourceValue:forKey:error: pour exécuter seulement sur le fil principal a finalement éliminé ce coup en un seul coup.

Questions connexes