Flash CS4 refuse de lâcher prise

2742

J'ai un projet Flash et il contient de nombreux fichiers source. J'ai une classe assez utilisée, appelez-la Jenine. J'ai récemment (et peut-être calleusement) déplacé Jenine d'un espace de noms à un autre. Je pensais que nous étions prêts - je pensais qu'il était temps. La nouvelle Jenine était meilleure à tous points de vue - elle avait perdu un peu de code, elle s'était dissociée de quelques relations de classe résiduelles et elle était enfin rentrée à la maison dans l'espace de noms qu'elle avait toujours secrètement connu dans son cœur était celui qu'elle avait vraiment appartenu à. Elle faisait partie de son espèce.

Malheureusement, Flash n'aurait rien de tout cela. Peut-être qu'il avait formé un attachement. Peut-être ne voulait -il pas que Jenine soit découplée. Quoi qu'il en soit, il s'est accroché à l'ancienne version parfaite de Jenine dans sa mémoire. Il a refusé de continuer. Il a ignoré ses appels (fonction). Il a essayé d'oublier ses nouvelles interfaces publiques. Au lieu de cela, chaque instance de Jenine qu'il a construite était toujours une copie de l'ancienne version, jusqu'à son chemin de classe:

var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!

Nous nous sommes battus. Je ne suis pas fier de certaines des choses que j'ai dites ou faites. Au final, dans une crise de rage, j'ai complètement supprimé toutes les références de Jenine. Elle était complètement, complètement effacée du système. Mon curseur est tombé sur l'option de menu "Vider la corbeille" comme le couvercle froid d'un cercueil.

Je ne pense pas que Flash ait jamais récupéré. À ce jour, il reste accroché à la mémoire de Jenine. Ses vieilles définitions imparfaites flottent toujours dans mon projet comme des fantômes abandonnés. Chaque fois que je force Flash à compiler, cela l'insère toujours avec amour dans mon film, nichant sa définition parmi les autres classes vivantes, comme un petit sanctuaire. Je me demande s'ils peuvent la voir.

Flash et je ne parle plus vraiment. J'écris mon code, il le compile. Il y a une nouvelle fille en ville nommée Summer qui ressemble presque à Jenine, comme si quelqu'un venait de copier son code source en gros dans une nouvelle classe, mais Flash n'a montré aucun intérêt. La plupart du temps, il ne fait que se morfondre et écrit de la mauvaise poésie dans mes commentaires quand il pense que je ne regarde pas.

J'espère que personne d'autre n'a eu une expérience similaire, que ce n'est qu'une ondulation singulière et douloureuse dans l'horrible lagon sombre qu'est la base de code Flash. Quelqu'un sait-il comment effacer le cache utilisé par le compilateur?

Ender
la source

Réponses:

701

Flash a toujours le fichier ASO, qui est le code d'octet compilé pour vos classes. Sous Windows, vous pouvez voir les fichiers ASO ici:

C:\Documents and Settings\username\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration\Classes\aso

Sur un Mac, la structure du répertoire est similaire dans /Users/username/Library/Application Support/


Vous pouvez supprimer ces fichiers à la main, ou dans Flash, vous pouvez choisir Control->Delete ASO filesde les supprimer.

wpjmurray
la source
34
Copié ci-dessous: Ceci et l'autre réponse très similaire sont exactement ce que je cherchais, mais malheureusement ne semblent pas résoudre le problème. Je vais relier celui-ci au tiem amusant de bogue d'Adobe. Je vais toutefois le marquer comme résolu.
Ender
292
PS: J'ai cliqué sur l'élément de menu encore et encore. J'ai plongé profondément dans la structure des fichiers dans une quête pour enfin effacer les fichiers qui contiennent les derniers échos de Jenine. Ils ne sont pas là. Quand je pose des questions à leur sujet, Flash marmonne juste quelque chose d'incohérent et regarde dans l'espace. Je pense que je peux commencer à entendre quelque chose par le martèlement fou du bouton de ma souris. Jenine rit.
Ender
23
@Ender, rencontrez-vous le même problème si vous compilez fraîchement le code sur une nouvelle boîte. Comme une nouvelle extraction du code sur un nouvel ordinateur? Cela devrait vous dire s'il s'agit ou non d'un problème avec le code ou des choses qui persistent sur votre système de fichiers *.
Jesse Webb
197

Essayez de supprimer vos fichiers ASO.

Les fichiers ASO sont des versions compilées mises en cache de vos fichiers de classe. Bien que l'EDI soit bien meilleur pour lâcher les anciens caches lorsque des modifications sont apportées, vous devez parfois les supprimer manuellement. Pour supprimer des fichiers ASO: Contrôle> Supprimer les fichiers ASO.

C'est également la cause du bogue «Je ne vois pas mes changements donc laissez-moi ajouter une trace maintenant tout fonctionne» qui a été introduit dans CS3.

Magocto
la source
165

Et si vous le compilez sur une autre machine? Un nouveau installé serait charmant. J'espère que votre machine n'est pas jalouse.

Rodrigo Strauss
la source
125

J'ai trouvé un comportement connexe qui peut aider (semble que votre problème spécifique soit plus profond cependant):

Flash vérifie si un fichier source doit être recompilé en regardant les horodatages. Si sa version compilée est plus ancienne que le fichier source, il se recompilera. Mais il ne vérifie pas si la version compilée a été générée à partir du même fichier source ou non.

Plus précisément, si vos fichiers actionscript sont sous contrôle de version et que vous annulez une modification, le fichier annulé aura généralement un horodatage plus ancien et Flash l'ignorera.

Laurie Cheers
la source
12
Certes, je travaille sur plusieurs projets avec des développeurs d'Afrique du Sud et de Londres. Lorsque nous transférons des fichiers flash dans les deux sens, nous devons les enregistrer localement, car la compilation provoquera une erreur folle basée sur l'horodatage du fichier. Essentiellement, essayer de compiler un flash qui a été enregistré à l'avenir est le problème. Nous l'avons compris en modifiant notre date sur nos systèmes d'exploitation. Essayez de vérifier votre horodatage.
Dominic Tancredi
103

De plus, pour utiliser votre nouvelle classe d'espaces de noms, vous pouvez également faire

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
Arpit
la source
96

Avez-vous plusieurs fichiers swf? Si votre classe est importée dans l'un des swf, les autres swf utiliseront également la même version de la classe. Une ancienne importation avec * dans un swf le fera. Recompilez tout et voyez si cela fonctionne.

Dave
la source
10
Oui, je parie que Jenine est compilée dans une autre partie de votre code, soit un swf ou un swc que vous utilisez.
Arpit
11

Utilisez un grepanalogue pour trouver les chaînes oldnamespaceet Jenineà l'intérieur des fichiers dans l'ensemble de votre dossier de projet. Vous saurez alors quelle étape faire ensuite.

Ark-kun
la source
4
Ma propre supposition quant à la raison pour laquelle vous avez été rétrogradé serait que vous avez donné une réponse assez évidente et fortement impliqué que cela résoudra le problème. Votre réponse n'est pas nécessairement mauvaise, mais votre formulation pourrait être interprétée comme étant excessivement confiante ou hautaine, ce qui agace parfois les gens.
Erhannis
5
Hmm. Peut-être que tu as raison. D'un autre côté, c'est frustrant lorsque la question ne fournit pas les réponses à des questions évidentes comme la mienne. Quelque chose comme "J'ai recherché la chaîne Jenine dans tous les fichiers, mais je n'ai pas trouvé de correspondance". Je suis intrigué. Je veux résoudre ce mystère. Mais l'auteur me laisse pendre.
Ark-kun
3
Comme je l'ai dit, votre réponse n'était pas nécessairement mauvaise; il se peut que votre phrasé ait ennuyé quelqu'un. Honnêtement, c'était ma première réaction. J'essaie généralement de dire les choses de la manière suivante: « j'espère que cela aidera», étant donné que si souvent la vraie cause des choses n'est pas ce que vous pensez. Encore une fois, je conviens que votre réponse est quelque chose que l'on devrait essayer, et mérite donc d'être considérée comme une réponse soumise, mais la formulation influence parfois les gens plus qu'elle ne devrait.
Erhannis