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?
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.
źródło
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.
źródło
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.
źródło
Ponadto, aby użyć nowej klasy z przestrzenią nazw, możesz to zrobić
źródło
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.
źródło
Użyj
grep
analogu, aby znaleźć ciągi znakówoldnamespace
iJenine
pliki w całym folderze projektu. Wtedy będziesz wiedział, co zrobić dalej.źródło