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.
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