2009-06-21 5 views
0

J'ai écrit un tableau de bord Mac OS X pour montrer le talent de StackOverflow de vous-même et d'autres personnes. Mon problème est que chaque fois que je mets à jour ce widget vers une nouvelle version, toutes les instances précédentes sont supprimées et une seule nouvelle instance est créée sur le tableau de bord. Donc, si vous avez déjà suivi le flair de 4 personnes, vous devrez recréer les widgets et entrer à nouveau leurs identifiants. :(Les instances de widget Dashboard multiples ne survivent pas à la mise à jour du widget. Un moyen d'empêcher cela?

Est-il possible de garder toutes les instances en cours d'exécution en mettant à jour un widget?

Vérification du fichier de préférences, je vois qu'une nouvelle instance est créée après une nouvelle version du widget est déployée. Est-ce par conception? est-tous widgets fonctionnent comme ça, par hasard ?? Si oui, cela peut être contournée en quelque sorte

?

Vous pouvez trouver manuellement le widget en question, y compris les fichiers de projet, à http://widget.huxhorn.de

I 'ai changé le code en remove() en définir les préférences pour les valeurs correctes au lieu de null comme suggéré ci-dessous - mais cela n'aide pas non plus.
Quelle est mon erreur ?? Aidez-moi! Je suis coincé!


L'autre problème de mon widget a été fixé:
J'ai accidentellement appelé

widget.preferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey)); 

au lieu de

widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey)); 

mais est maintenant fixe (non encore publié).

Répondre

0

Je pense que vos appels à setPreferenceForKey et preferenceForKey ont l'air étranges. D'où vient ce null. Ne devraient-ils ressembler à

widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey)) 
widget.setPreferenceForKey(value, dashcode.createInstancePreferenceKey(userIdPrefKey)); 

La syntaxe avec null

widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey)) 

à remove() supprimer la préférence? Cela vous expliquerait la situation, je suppose. Lors de la mise à jour, le remove() est appelé surley et ainsi, au redémarrage du widget, les préférences ont disparu.


Je suppose qu'il n'existe qu'une seule façon de conserver vos préférences lors d'une mise à jour. Créez une seule préférence sans utiliser dashboard.createInstancePreferenceKey mais pensez plutôt à une valeur de clé unique.

Dans cette préférence, vous pouvez sauvegarder tous les ID utilisateurs entrés (par n'importe quelle instance) avec une liste croissante (disons séparée par des virgules). Quand une instance de widget est ouverte, le widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey)) n'est pas déjà défini, vous pouvez laisser l'utilisateur en choisir un en lui donnant un select ou une telle chose

Je pensais juste que le processus de mise à jour est assez sympa pour migrer le préférences à la nouvelle version. Même lorsque vous ne supprimez pas les préférences, je pense que le widget.L'identifiant (createInstancePreferenceKey) aura changé et vous ne pourrez pas accéder aux "anciens" paramètres.

+0

Bonne idée, j'ai essayé et changé le code - encore une fois - définir les préférences aux valeurs correctes ... ne pas d'aide :(Ce code était à l'origine destiné à nettoyer après le widget de sorte qu'il n'y aurait pas de préfs inutilisés laissés par les instances de widget supprimées ... – Huxi

+0

La définition des valeurs à null était correcte Une nouvelle instance unique est créée dans le cas d'une mise à jour donc la suppression des valeurs des instances précédentes est le chemin à parcourir, je suppose .. – Huxi

+0

Je suis au courant de cela.J'ai proposé une autre solution dans la réponse modifiée – jitter