Flash CS4 nie chce odpuścić


2742

Mam projekt Flash i zawiera wiele plików źródłowych. Mam dość intensywnie używaną klasę, nazwij to Jenine. Niedawno (i być może bezlitośnie) przeniosłem Jenine z jednej przestrzeni nazw do drugiej. Myślałem, że jesteśmy gotowi - myślałem, że nadszedł czas. Nowa Jenine była lepsza pod każdym względem - straciła trochę rozdętego kodu, odłączyła się od kilku szczątkowych związków klasowych i wreszcie wróciła do przestrzeni nazw, którą zawsze potajemnie znała w swoim sercu, była tą, którą naprawdę znała należy do. Należała do swego rodzaju.

Niestety Flash nie miałby nic z tego. Być może utworzyło to przywiązanie. Być może nie chciał, aby Jenine została oddzielona. Tak czy inaczej, trzymał się starej, idealnej wersji Jenine w swojej pamięci. Nie chciał iść dalej. Zignorował wywołania jej (funkcji). Próbowała zapomnieć o jej nowych publicznych interfejsach. Zamiast tego każde utworzone przez nią wystąpienie Jenine było zawsze kopią starej wersji, aż do ścieżki klas:

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

Walczyliśmy. Nie jestem dumny z niektórych rzeczy, które powiedziałem lub zrobiłem. W końcu, w przypływie wściekłości, całkowicie usunąłem wszystkie odniesienia do Jenine. Została całkowicie, całkowicie usunięta z systemu. Mój kursor padł na opcję menu „Opróżnij kosz”, jak zimna pokrywa trumny.

Nie sądzę, żeby Flash kiedykolwiek wyzdrowiał. Do dziś wciąż pamięta o Jenine. Jej stare, niedoskonałe definicje wciąż płyną w moim projekcie jak opuszczone duchy. Ilekroć zmuszam Flasha do kompilacji, nadal z miłością wprowadza ją do mojego filmu, umieszczając jej definicję wśród innych żywych klas, jak małe sanktuarium. Zastanawiam się, czy ją zobaczą.

Flash i tak naprawdę już nie rozmawiam. Piszę mój kod, kompiluje go. W mieście jest nowa dziewczyna o imieniu Summer, która wygląda prawie identycznie jak Jenine, jakby ktoś właśnie skopiował jej kod źródłowy do nowej klasy, ale Flash nie okazał żadnego zainteresowania. Przez większość czasu po prostu się kręci i pisze złe komentarze w moich komentarzach, kiedy myśli, że nie patrzę.

Mam nadzieję, że nikt inny nie miał podobnego doświadczenia, że ​​jest to jedyna, bolesna fala w przerażającej ciemnej lagunie, która jest bazą kodu Flash. Czy ktoś ma pomysł, jak usunąć pamięć podręczną używaną przez kompilator?

Odpowiedzi:


701

Flash nadal ma plik ASO, który jest skompilowanym kodem bajtu dla twoich klas. W systemie Windows pliki ASO można zobaczyć tutaj:

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

Na komputerze Mac struktura katalogów jest podobna /Users/username/Library/Application Support/


Możesz usunąć te pliki ręcznie lub we Flashu możesz Control->Delete ASO filesje usunąć.


34
Skopiowano od dołu: Ta i druga, bardzo podobna odpowiedź są dokładnie tym, czego szukałem, ale niestety nie wydaje się, aby rozwiązać problem. Mam zamiar napisać kredą do Adobe Tiem Bug Fun Tiem. Oznaczę to jednak jako rozwiązane.
Ender

292
PS: Kliknąłem element menu w kółko. Zanurzyłem się głęboko w strukturę plików, starając się w końcu zniszczyć pliki zawierające ostatnie echa Jenine. Nie ma ich tam. Kiedy o nich pytam, Flash tylko mamrocze coś niespójnego i wpatruje się w przestrzeń. Myślę, że mogę usłyszeć coś ponad szalonym uderzeniem mojego przycisku myszy. Jenine się śmieje.
Ender

23
@Ender, czy ten sam problem występuje, jeśli świeżo skompilujesz kod na nowym polu. Jak świeże pobranie kodu na nowy komputer? To powinno ci powiedzieć, czy jest to problem z kodem lub innymi problemami w twoim systemie plików *.
Jesse Webb

197

Spróbuj usunąć swoje pliki ASO.

Pliki ASO to skompilowane wersje plików klas w pamięci podręcznej. Chociaż IDE jest znacznie lepsze w puszczaniu starych pamięci podręcznych po wprowadzeniu zmian, czasami trzeba je ręcznie usunąć. Aby usunąć pliki ASO: Sterowanie> Usuń pliki ASO.

Jest to również przyczyną błędu „Nie widzę moich zmian, więc dodajmy ślad, teraz wszystko działa”, który został wprowadzony w CS3.


165

Co się stanie, jeśli skompilujesz go na innym komputerze? Świeżo zainstalowany byłby piękny. Mam nadzieję, że twoja maszyna nie jest zazdrosna.


125

Znalazłem jedno powiązane zachowanie, które może pomóc (wydaje się, że Twój konkretny problem jest głębszy):

Flash sprawdza, czy plik źródłowy wymaga ponownej kompilacji, patrząc na znaczniki czasu. Jeśli skompilowana wersja jest starsza niż plik źródłowy, nastąpi ponowna kompilacja. Ale nie sprawdza, czy skompilowana wersja została wygenerowana z tego samego pliku źródłowego, czy nie.

W szczególności, jeśli masz pliki ActionScript pod kontrolą wersji i przywrócisz zmianę, cofnięty plik zwykle będzie miał starszy znacznik czasu, a Flash go zignoruje.


12
To prawda, pracuję nad kilkoma projektami z programistami z Południowej Afryki i Londynu. Kiedy przekazujemy pliki flash tam iz powrotem, musimy zapisać je lokalnie, ponieważ kompilacja spowoduje szalony błąd na podstawie znacznika czasu pliku. Zasadniczo problemem jest próba skompilowania pamięci flash, która została zapisana w przyszłości. Odkryliśmy to, zmieniając datę w naszym systemie operacyjnym. Spróbuj sprawdzić swój znacznik czasu.
Dominic Tancredi

103

Ponadto, aby użyć nowej klasy z przestrzenią nazw, możesz to zrobić

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

96

Czy masz kilka plików SWF? Jeśli twoja klasa jest importowana do jednego z plików SWF, inne pliki SWF również będą używać tej samej wersji klasy. Zrobi to jeden stary import z * w jednym pliku SWF. Ponownie skompiluj wszystko i sprawdź, czy to działa.


10
Tak, założę się, że Jenine jest wkompilowana w inną część twojego kodu, albo swf, albo swc, którego używasz.
Arpit

11

Użyj grepanalogu, aby znaleźć ciągi znaków oldnamespacei Jeninepliki w całym folderze projektu. Wtedy będziesz wiedział, co zrobić dalej.


4
Moje przypuszczenie, dlaczego zostałeś odrzucony, byłoby takie, że dałeś dość oczywistą odpowiedź i mocno sugerowałeś, że rozwiąże to problem. Twoja odpowiedź niekoniecznie jest zła, ale twoje sformułowanie może być interpretowane jako nieuzasadnione zbyt pewne siebie lub wyniosłe, co czasem denerwuje ludzi.
Erhannis,

5
Hmm Może masz rację. Z drugiej strony frustrujące jest to, że pytanie nie zawiera odpowiedzi na oczywiste pytania, takie jak moje. Coś w stylu „Szukałem ciągu Jenine we wszystkich plikach, ale nie mogłem znaleźć dopasowania”. Jestem zaintrygowany. Chcę rozwiązać tę tajemnicę. Ale autor pozostawia mnie wiszącego.
Ark-kun,

3
Jak powiedziałem, twoja odpowiedź niekoniecznie była zła; być może po prostu frazowanie kogoś drażniło. Szczerze mówiąc, to była moja pierwsza reakcja. Zasadniczo staram się mówić rzeczy w sposób „ mam nadzieję, że to pomoże”, biorąc pod uwagę, że tak często prawdziwą przyczyną rzeczy nie jest to, co myślisz. Ponownie zgadzam się, że twoja odpowiedź jest czymś, co należy wypróbować, i dlatego zasługuje na rozważenie jako przesłanej odpowiedzi, ale frazowanie czasami wpływa bardziej na ludzi niż powinno.
Erhannis,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.