Flash CS4 si rifiuta di lasciarsi andare


2742

Ho un progetto Flash e ha molti file sorgente. Ho una classe abbastanza usata, la chiamo Jenine. Di recente (e, forse, insensibilmente) ho trasferito Jenine da uno spazio dei nomi a un altro. Pensavo fossimo pronti, pensavo fosse il momento. La nuova Jenine era migliore in ogni modo - aveva perso un po 'di codice, si era disaccoppiata da alcune relazioni di classe rudimentali, ed era finalmente tornata a casa nello spazio dei nomi che aveva sempre segretamente saputo nel suo cuore era quello che aveva veramente apparteneva a. Era tra i suoi simili.

Sfortunatamente, Flash non avrebbe nulla di tutto ciò. Forse aveva formato un attaccamento. Forse non voleva che Jenine fosse disaccoppiato. Ad ogni modo, si aggrappava alla vecchia versione perfetta di Jenine nella sua memoria. Si è rifiutato di andare avanti. Ha ignorato le sue chiamate (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 percorso di classe:

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 imponente impeto di rabbia, ho eliminato completamente tutti i riferimenti di Jenine. Era completamente, completamente cancellata dal sistema. Il mio cursore è caduto sull'opzione di menu "Svuota cestino" come il coperchio freddo di una bara.

Non penso che Flash sia mai guarito. Ancora oggi si aggrappa al ricordo 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 circola e scrive cattive poesie nei miei commenti quando pensa che non stia guardando.

Spero che nessun altro abbia avuto un'esperienza simile, che questa è solo un'increspatura singolare e dolorosa nell'orribile laguna oscura che è la base di codice di Flash. Qualcuno ha idea di come cancellare la cache utilizzata dal compilatore?

Risposte:


701

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 delle directory è simile in /Users/username/Library/Application Support/


Puoi rimuovere quei file a mano o in Flash puoi selezionare Control->Delete ASO filesper rimuoverli.


34
Copiato dal basso: questa e l'altra, una risposta molto simile sono esattamente quello che stavo cercando, ma sfortunatamente non sembra risolvere il problema. Ho intenzione di aggiungere questo a Adobe bug fun tiem. Lo segnerò come risolto, comunque.
Ender,

292
PS: ho cliccato più volte sulla voce di menu. Mi sono immerso profondamente nella struttura dei file nel tentativo di eliminare definitivamente i file che contengono gli ultimi echi di Jenine. Non ci sono. Quando chiedo di loro, Flash mormora qualcosa di incoerente e fissa lo spazio. Penso di poter iniziare a sentire qualcosa sopra il martellare pazzo del mio pulsante del mouse. Jenine sta ridendo.
Ender,

23
@Ender, riscontri lo stesso problema se compili di nuovo il codice in una nuova casella. Come un nuovo checkout del codice su un nuovo computer? Questo dovrebbe dirti se si tratta o meno di un problema con il codice o cose persistenti sul tuo filesystem *.
Jesse Webb,

197

Prova a eliminare i tuoi file ASO.

I file ASO sono versioni compilate nella cache dei file di classe. Sebbene l'IDE sia molto più efficace nel lasciare andare le vecchie cache quando vengono apportate modifiche, a volte è necessario eliminarle manualmente. Per eliminare i file ASO: Controllo> Elimina file ASO.

Questa è anche la causa del bug "Io non sto vedendo i miei cambiamenti-così-lasciami-aggiungere-una-traccia-ora-tutto-funziona" che è stato introdotto in CS3.


165

E se lo compili usando un'altra macchina? Un nuovo installato sarebbe adorabile. Spero che la tua macchina non sia gelosa.


125

Ho trovato un comportamento correlato che può aiutare (sembra che il tuo problema specifico sia più profondo):

Flash verifica se è necessario ricompilare un file di origine esaminando i timestamp. Se la sua versione compilata è precedente al file di origine, verrà ricompilata. Ma non controlla se la versione compilata è stata generata dallo stesso file di origine o meno.

In particolare, se i file ActionScript sono sotto il controllo della versione e si annulla una modifica, il file ripristinato avrà di solito un timestamp precedente e Flash lo ignorerà.


12
È vero, lavoro su diversi progetti con sviluppatori dal Sudafrica e da Londra. Quando passiamo avanti e indietro i file flash, dobbiamo salvarli localmente, poiché la compilazione causerà un errore folle basato sulla data / ora del file. In sostanza, il problema è provare a compilare un flash che è stato salvato in futuro. Lo abbiamo capito cambiando la nostra data sul nostro sistema operativo. Prova a controllare il tuo timestamp.
Dominic Tancredi,

103

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

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

96

Hai diversi file swf? Se la tua classe viene importata in uno degli swf, anche gli altri swf useranno la stessa versione della classe. Una vecchia importazione con * in un file SWF lo farà. Ricompila tutto e vedi se funziona.


10
Sì, sto scommettendo che Jenine è compilata in qualche altra parte del tuo codice, una swf o una swc che stai utilizzando.
Arpit,

11

Utilizzare un grepanalogo per trovare le stringhe oldnamespacee Jeninei file all'interno della cartella dell'intero progetto. Quindi sapresti quale passo fare dopo.


4
La mia ipotesi sul motivo per cui sei stato sottratto sarebbe che hai dato una risposta abbastanza ovvia e ha fortemente sottinteso che risolverà il problema. La tua risposta non è necessariamente negativa, ma il tuo fraseggio potrebbe essere interpretato come eccessivamente sicuro di sé o altero, il che a volte infastidisce le persone.
Erhannis,

5
Hmm. Forse hai ragione. D'altra parte, è frustrante quando la domanda non fornisce le risposte a domande ovvie come la mia. Qualcosa del tipo "Ho cercato la stringa Jenine in tutti i file, ma non sono riuscito a trovare una corrispondenza". Sono incuriosito. Voglio risolvere questo mistero. Ma l'autore mi lascia sospeso.
Ark-kun,

3
Come ho detto, la tua risposta non è stata necessariamente negativa; potrebbe essere stato solo che il tuo fraseggio infastidisse qualcuno. Onestamente, questa è stata la mia prima reazione. In genere cerco di dire le cose nel modo " speriamo che questo possa aiutare", dato che così spesso la vera causa delle cose non è ciò che penseresti. Ancora una volta, sono d'accordo che la tua risposta è qualcosa che dovresti provare, e quindi merita considerazione come risposta inviata, ma il fraseggio a volte influenza le persone più di quanto dovrebbe.
Erhannis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.