Flash CS4 se niega a dejar ir
caching flash-cs4 (7)
Tengo un proyecto de Flash, y tiene muchos archivos de origen. Tengo una clase bastante usada, llámala Jenine. Recientemente (y, quizás, cruelmente) reubicé a Jenine de un espacio de nombres a otro. Pensé que estábamos listos, pensé que era hora. La nueva Jenine era mejor en todos los sentidos: había perdido algo de código, se había desligado de algunas relaciones de clase vestigiales, y finalmente había regresado al espacio de nombres que siempre había conocido en secreto en su corazón y era la única pertenecía a. Ella estaba entre su propia clase.
Desafortunadamente, Flash no tendría nada de eso. Tal vez se había formado un archivo adjunto. Tal vez no quería que Jenine fuera desacoplada. De cualquier manera, se aferró a la versión antigua y perfecta de Jenine en su memoria. Se negó a seguir adelante. Ignoró sus llamadas (función). Intentó olvidar sus nuevas interfaces públicas. En cambio, cada instancia de Jenine que construyó fue siempre una copia de la versión antigua, hasta su classpath:
var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!
Nos peleamos. No estoy orgulloso de algunas de las cosas que dije o hice. Al final, en un ataque de ira, eliminé todas las referencias de Jenine por completo. Estaba completamente borrada del sistema. Mi cursor cayó sobre la opción de menú "Vaciar papelera" como la tapa fría de un ataúd.
No creo que Flash se haya recuperado nunca. A día de hoy todavía se aferra a la memoria de Jenine. Sus antiguas definiciones imperfectas todavía flotan en mi proyecto como fantasmas abandonados. Cada vez que fuerzo a Flash a compilar, todavía la inserta amorosamente en mi película, anidando su definición entre las clases vivientes, como un pequeño santuario. Me pregunto si pueden verla.
Flash y ya no hablo mucho. Escribo mi código, lo compila. Hay una chica nueva en la ciudad llamada Summer que parece casi idéntica a Jenine, como si alguien hubiera copiado su código fuente al por mayor en una nueva clase, pero Flash no ha mostrado ningún interés. La mayoría de los días simplemente se lamenta y escribe mala poesía en mis comentarios cuando piensa que no estoy mirando.
Espero que nadie más haya tenido una experiencia similar, que esta es solo una onda singular y dolorosa en la horrible y oscura laguna que es el código base de Flash. Si, por casualidad, tienes alguna posibilidad, o tienes alguna idea de cómo borrar el maldito caché que está usando el compilador, por favor, ayuda.
¿Tienes varios archivos swf? Si su clase se importa en uno de los swf, otros swf también usarán la misma versión de la clase. Una importación antigua con * en un swf lo hará. Recompila todo y ve si funciona.
¿Y si lo compilas usando otra máquina? Un nuevo instalado sería encantador. Espero que su máquina no sea celosa.
Además, para usar tu nueva clase de espacio de nombres también puedes hacer
var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
Flash aún tiene el archivo ASO, que es el código de bytes compilado para sus clases. En Windows, puedes ver los archivos ASO aquí:
C:/Documents and Settings/username/Local Settings/Application Data/Adobe/Flash CS4/en/Configuration/Classes/aso
En una Mac, la estructura del directorio es similar en /Users/username/Library/Application Support/
Puede eliminar esos archivos a mano, o en Flash puede seleccionar Control->Delete ASO files
para eliminarlos.
He encontrado un comportamiento relacionado que puede ayudar (aunque parece que tu problema específico es más profundo):
Flash comprueba si un archivo fuente necesita recompilarse mirando las marcas de tiempo. Si su versión compilada es más antigua que el archivo fuente, se volverá a compilar. Pero no comprueba si la versión compilada se generó desde el mismo archivo fuente o no.
Específicamente, si tiene sus archivos de acciones en el control de versiones y Revertir un cambio, el archivo revertido usualmente tendrá una marca de tiempo más antigua y Flash lo ignorará.
Intenta borrar tus archivos ASO.
Los archivos ASO son versiones compiladas en caché de sus archivos de clase. Aunque el IDE es mucho mejor para dejar de usar cachés antiguos cuando se realizan cambios, a veces hay que eliminarlos manualmente. Para eliminar archivos ASO: Control> Eliminar archivos ASO.
Esta es también la causa del error "No estoy viendo mis cambios, así que permítame agregar un rastro ahora todo funciona", que se introdujo en CS3.
Use un analógico grep
para encontrar las cadenas de oldnamespace
y Jenine
dentro de los archivos en toda la carpeta del proyecto. Entonces sabrías qué paso hacer a continuación.