Domanda Flash CS4 rifiuta di lasciar andare


Ho un progetto Flash e ha molti file sorgente. Ho una classe abbastanza pesante, la chiamano Jenine. Recentemente (e, forse, insensibilmente) ho trasferito Jenine da un namespace all'altro. Pensavo che fossimo pronti - pensavo fosse ora. La nuova Jenine era migliore sotto tutti i punti di vista - aveva perso un po 'di codice, si era staccata da qualche rara parentela di classe, e alla fine era tornata a casa nello spazio dei nomi che lei aveva sempre segretamente conosciuto nel suo cuore era quella che lei veramente apparteneva a. Era tra i suoi simili.

Sfortunatamente, Flash non avrebbe nulla di tutto ciò. Forse aveva formato un attaccamento. Forse no volere Jenine per essere disaccoppiata. Ad ogni modo, si aggrappava alla vecchia versione perfetta di Jenine nella sua memoria. Si è rifiutato di andare avanti. Ignora le sue chiamate (di funzione). Ha cercato di dimenticare le sue nuove interfacce pubbliche. Invece, ogni istanza di Jenine che ha costruito era sempre una copia della vecchia versione, fino al suo classpath:

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

Abbiamo combattuto. Non sono orgoglioso di alcune delle cose che ho detto o fatto. Alla fine, in un attacco di rabbia, ho eliminato completamente tutti i riferimenti di Jenine. Era completamente, completamente cancellata dal sistema. Il mio cursore è caduto sull'opzione di menu "Empty Trash" come il coperchio freddo di una bara.

Non penso che Flash abbia mai recuperato. Ad oggi si aggrappa ancora alla memoria di Jenine. Le sue vecchie definizioni imperfette fluttuano ancora nel mio progetto come fantasmi abbandonati. Ogni volta che costringo Flash a compilare, la inserisce ancora amorevolmente nel mio film, annidando la sua definizione tra le altre classi viventi, come un piccolo santuario. Mi chiedo se possono vederla.

Flash e non parlo più davvero. Scrivo il mio codice, lo compila. C'è una nuova ragazza in città di nome Summer che sembra quasi identica a Jenine, come se qualcuno avesse appena copiato il suo codice sorgente all'ingrosso in una nuova classe, ma Flash non ha mostrato alcun interesse. La maggior parte dei giorni non fa che mordere e scrive cattiva poesia nei miei commenti quando pensa che non stia guardando.

Spero che nessun altro abbia avuto un'esperienza simile, che questa sia solo un'increspatura singolare e dolorosa nell'orribile laguna oscura che è la base di codice Flash. Se, per qualche caso fortuito, hai o se hai idea di come cancellare qualsiasi dannata cache utilizzata dal compilatore, per favore, per favore aiutaci.


2694
2018-02-03 17:32


origine


risposte:


Flash ha ancora il file ASO, che è il codice byte compilato per le tue classi. Su Windows, puoi vedere i file ASO qui:

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

Su un Mac, la struttura della directory è simile in /Users/username/Library/Application Support/ 


È possibile rimuovere tali file manualmente o in Flash è possibile selezionare Control->Delete ASO files per rimuoverli.


693
2018-02-03 18:49



Prova a cancellare i tuoi file ASO.

I file ASO sono versioni memorizzate nella cache dei tuoi file di classe. Sebbene l'IDE sia molto più efficace nel lasciar andare i vecchi cache quando vengono apportate modifiche, a volte è necessario eliminarli manualmente. Per eliminare i file ASO: Controllo> Elimina file ASO.

Questa è anche la causa del bug "I-am-not-seeing-my-changes-così-lascia-me-add-a-trace-now-everything-works" che è stato introdotto in CS3.


198
2018-02-03 18:40



Cosa succede se lo compili usando un'altra macchina? Una nuova installazione sarebbe adorabile. io spero la tua macchina non è geloso


164
2018-02-03 20:25



Ho trovato un comportamento correlato che può essere d'aiuto (sembra che il tuo problema specifico funzioni più a fondo):

Flash controlla se un file sorgente ha bisogno di essere ricompilato guardando i timestamp. Se la sua versione compilata è più vecchio rispetto al file sorgente, ricompilerà. Ma non controlla se la versione compilata è stata generata dallo stesso file sorgente o meno.

Specificamente, se hai i tuoi file actionscript sotto controllo di versione e ripristini una modifica, il file ripristinato di solito avrà un timestamp più vecchio e Flash lo ignorerà.


125
2018-02-03 18:04



Inoltre, per usare la tua nuova classe con lo spazio dei nomi puoi anche farlo

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()

102
2018-02-05 16:55



Avete diversi file swf? Se la tua classe è importata in uno swf, anche gli altri swf useranno la stessa versione della classe. Lo farà una vecchia importazione con * in one swf. Ricompila tutto e vedi se funziona.


96
2018-02-04 04:26



Usare un grep analogico per trovare le stringhe oldnamespace e Jenine all'interno dei file nell'intera cartella del progetto. Allora sapresti cosa fare dopo.


10
2017-07-02 01:41