1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Objekte verlieren ihre "titel" nach dem schließen des Fensters

Dieses Thema im Forum "AppleScript" wurde erstellt von schnydi, 09.01.06.

  1. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Objekte verlieren ihre "Namen" nach dem schließen des Fensters

    Ich habe ein grosses Problem, nach dem schliessen des übergeordneten Fensters in meinem AppleScript Studio Programm verlieren alle darin enthaltenen Objekte und das Fenster selbst ihren AppleSkript “Namen“.
    Der Fehler trat erst auf, nachdem ich auf MacOS 10.4 Aktualisiert habe. Und danach mit Xcode2 erstellt habe. Frühere Build-versionen hingegen die noch mit XCode1 erstellt wurden stürzen sofort nach dem öffnen des ersten Fensters ab mit dem Signal SIGSERV (11).

    Ich habe es mal anhand eines Skripts im SkriptEditor das Problem dargestellt.
    Code:
    tell application "MediaGate"
    	show window "WINDOW:Main"
    	get name of windows
    	close window "WINDOW:Main"
    	get name of windows
    end tell
    
    //Und nun das ergebniss aus dem Event-Protokoll:
    
    tell application "MediaGate"
    	show window "WINDOW:Main"
    	get name of every window
    		{[COLOR="red"]"WINDOW:Main"[/COLOR], etc...} //Das ist der richtige AppleSkript Name
    	close window "WINDOW:Main"
    	get name of every window
    		{[COLOR="red"]"MediaGate / Home"[/COLOR], etc...} //Das ist der Titel des Fensters
    end tell
    
    Der AppleSkript Name für das Fenster wurde nach dem schliessen des Fensters in den "Window Title" des Fensters umgewandelt wie von Zauberhand. Alle Obiekte des Fensters haben danach ihren AppleSkript Namen verloren.

    Ich währe für jede Hilfe sehr dankbar!
     
    #1 schnydi, 09.01.06
    Zuletzt bearbeitet: 11.01.06
  2. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Aufgrund dessen, dass niemand geantwortet hat, muss ich davon ausgehen, dass ich der einzige Mensch hier bin der ein solches Problem hat. Ich habe nun schon unzählige Stunden in dieses Problem gestekt und bin zu keiner Lösung gekommen :mad: . Auch mit einem neu erstelltem Test Programm tritt das Problem auf:

    Code:
    tell application "j"
    	get name of every window
    		{"hello"}
    	close window "hello"
    	get name of every window
    		{"Window"}
    end tell
    
    Ich habe das XCode Test Projekt angehängt: j.zip
    wenn jemand mal lust hat kann er es ja mal bei sich testen.

    Ich weiss, dass hier viele schlaue Köpfe rumschwirren, mit jahrelanger erfahrung mit Skript's. Eventuel hat ja jemand einen vorschlag, wass ich noch ausprobieren könnte.
     
    #2 schnydi, 15.01.06
    Zuletzt bearbeitet: 15.01.06
  3. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Hallo Pete

    der angegebene Code ist das Event Protokoll aus dem Script Editor, um zu zeigen wie sich das Fenster mit dem AppleScript Namen "hello" nachh dem schliessen automatisch zu "Window" umbenannt hat. "Window" ist ja der Name derTitelzeile des Fensters.

    Was meinst do mit offenen Code? Benutzerrechte ändern?

    Dein Skript habe ich natürlich gleich mal ausprobiert. Hier das Event Protokoll:
    Code:
    tell application "j"
    	count every window
    		1
    	get class of item 1 of every window
    		window
    	get class of item 1 of every window
    		window
    	(*window*)
    end tell
    
    Die Klasse "window" sollte ja den Befehl "close" aus "Standart Suite" aus der Bibliothek des Programms unterstützen oder nicht? mit MacOS 10.3.9 hat auch alles einwandfrei funktioniert. Das Problem habe ich erst seit 10.4!

    Kann es denn sein das der Systemupdate fehlerhaft installiert wurde? Ich habe noch andere Probleme seit 10.4 z.B. mit dem DVD Player. Am liebsten würde ich zurück auf 10.3!

    Gruss Patric
     
  4. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Ich habe den Anhang sofort GELOESCHT!!!

    Weis zwar nicht wie so etwas möglich ist, aber SORRY, SORRY,SORRY!!!

    Scheinbar habe ich mehr Probleme mit meinem System als mir bewust ist! Ich hoffe des haben nicht noch mehr Leute die date j.zip heruntergeladen. wenn doch löscht sie bitte sofort wieder!!

    Dass war der ganze inhalt des Skripts:
    Code:
    tell application "j"
    	get name of windows
    	close window "hello"
    	get name of windows
    end tell
    
     
  5. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Hallo Pete

    Du hast absolut recht, ich verwende tatsächlich eine alte Version von XCode (nämlich 2.0). Währe schön, wenn dass ganze ein Bug in dieser Version von XCode ist.

    Ich habe mit "j" einfach ein neues Programm mit XCode erstellt und dort mit dem IB dem Fenster im Infopanel unter AppleSkript dem Fenster den Namen "hello" gegeben.
    Danach habe ich mit dem SkriptEditor mit dem Befehl:
    get name of windows of application "j"
    alle namen der Fenster abgerufen. Die Antwort ist wie erwartet: {"hello"} Also der Name den ich zuvor in IB dem einzigen Fenster vergeben habe.

    Nun lasse ich mit dem Befehl: close window "hello" , das Fenster schliessen. Und genau hier passiert der grosse Fehler: ALLE Objekte einschliesslich des übergeortneten Fensters verliehren hier ihre AppleSkript Namen. In meinem eigentlichen Programm, ist das fatal, denn ich beziehe mich bei allen Aufrufen und Befehle immer auf den AppleSkript Namen.

    Wird nun der exakt gleiche Befehl: get name of windows , erneut aufgerufen ist jedoch die ausgabe eine andere nämlich: {"windows"} :eek:


    Mein eigentliches Programm ist gut 13Mb gross, und desshalb macht es wenig sinn, des hier zum Download bereitzustellen, desshalb der umweg über "j" es ist im Prinzip ein absolut leeres Programm, allerdings auf meinem Computer erstellt, und mich hätte es interesiert, ob ein von mir erstelltes Programm auch auf anderen Maschinen nicht funktioniert. Aber ich sehe ein, dass es eine schlechte Idee war.

    Jedenfalls installiere ich jetzt zuerst XCode 2.2 und schaue dann weiter.

    Sorry und Danke für deine Hilfe!
    Mfg Patric
     
  6. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Immer dieses Windows.

    Kinder, ich hab euch schon tausendmal gesagt: Lasst die Finger von Windows! Das ist ungesund! Man wird zwar wenigstens (ganz sicher) nicht süchtig, aber gesund ist das nicht! ;)

    Gruß,

    .commander
     
  7. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    @pete: Na, jetzt mach doch den Doc schnydi nicht so fertig, der hat doch eh schon ein schlechtes Gewissen ;)
     
  8. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Hallo zusammen

    Also ich hab während meiner abwesenheit mein mac ein bisschen aufgemöbelt.
    Erstens habe ich auf 10.4.4 aktualisiert, und zweitens habe ich XCode 2.2 heruntergeladen. Leider brauchte ich 3 versuche bis endlich ein erfolgreicher Download zustande gekommen ist :( . Warum auch immer so etwas nicht über die Systemeigene Software Aktualisierung integriert ist, und muss es denn gleich knapp 900Mb sein?

    Egal jetzt zum Thema; Es hat alles nichts genützt :-c alles ist beim alten geblieben!
    @pete: statt "get windows" kann mann auch schreiben: "get every window" ist also dasselbe.

    Dass es besser gewesen währe die Objekte über ihre id zu identifizieren weis ich jetzt auch, obwohl es auch grosse vorteile hat jedem objekt einen eindeutigen Namen zuzuweisen, oder wie soll ich mir die id's von 100derten von Objekten merken?

    Übrigens habe ich gestern in einem anderen Thread von jemanden gelesen der das selbe Problem schilderte, allerdings nur beiläufig. Dass heist immerhin, dass ich nicht ganz alleine bin mit dem Problem. Wenn ich herausfinde wo dann werde ich das melden.

    Grüsse aus der Schweiz: Patric
     
  9. LaK

    LaK Reinette Coulon

    Dabei seit:
    30.03.05
    Beiträge:
    953

    das könnte man jetzt auch falsch verstehen:

    BAD KARMA ATTACKE! ;)
     
  10. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    *Commander: Nickt wie verrückt*
     
  11. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Ich habe den Artikel von dem ich im letzten Beitrag wieder gefunden. Er ist ein Thema auf: www.mactechnews.de.
    Dort heist es etwa:
    Aber auch dort ist keine Lösung zu finden. Ich habe in anderen Diskusionen Meldungen gefunden wie:
    Der Fehler liegt in der erweiterung AppleSkript2.component. Es giebt zurzeit kein Update dass das Problem beheben würde.

    Wiso meinst ihr hätte es nachteile Objekte über ihren Namen zu identifizieren?

    Ein Beispiel:
    In einem Programm erstelle ich ein neues Fenster und lege dort mehrere Buttons zur steuerung von iTunes an. Nun taufe ich im Info Fenster unter AppleSkript die Namen fest und zwar so: 1. itunesPlay, 2. itunesStop etc... . In XCode schreibe ich nun Aktionen für die einzelnen Buttons im gleichen Skript: if name of theObject is equal to "itunesPlay" then... .Selbst wenn ich Jahre später eine Funktion ändern möchte, ist der Name itunesPlay klar was die aufgabe dieses Buttons ist. Hingegen mit der id 133 kann ich danach nichts mehr anfangen.

    Aber der springende Punkt ist nach wie vor: Warum verlieren alle meine Objekte nach dem klicken auf das hübsche kleine rote kästchen links oben ihre Namen???
     
  12. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Ich habe inzwischen noch unzählige Diskusionen gefunden die sich mit dem Problem beschäftigen!!! Überall schildern Leute ihr Problem und niemand weis rat!
    Wenn also jemand eine Lösung zu diesem Problem hat dann hilft er nicht nur mir, sondern noch vielen anderen Skripters!!!
     
  13. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Ich muss iher mal eins klarstellen über Fenster:

    Name of window ist der AppleSkript Name und den vergibt man im IB unter AppleSkript!
    Title of window ist der Name des Fensters in Titelleiste! Der wird im IB unter Attributes und nur den kann der Benutzer sehen! Und den werde ich logischerweise niemals in einem Skript verwenden!

    Ich habe desshalb immer von AppleSkript Namen gesprochen!
    Mit meinem Beispielskript wollte ich zeigen, wass nach dem schliesen eines fensters mit dem AppleSkript Namen passiert.

    Ich hätte eine Lösung, aber ich weis nicht wie ich es anstellen soll!
    Also: wie ist es möglich einen close befehl in ein hide umzuwandeln, denn dann müsste ich über den "on will close theObject" Handler einen stopp der Aktion erwirken. Weis jemand wie das geht? o_O

    Leider habe ich schon gegessen, aber Morgen ist ja auch nuch ein Tag!!
     
    #13 schnydi, 19.01.06
    Zuletzt bearbeitet: 19.01.06
  14. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Tja hast sicher viel zeit in dein schönes skript investiert, oder hast du es kopiert?!? ;)

    Ich stelle mir die Lösung meines Problems etwa so vor:

    Code:
    [COLOR="Blue"][B]on[/B] will close[/COLOR] [COLOR="green"]meinFenster[/COLOR]
         [COLOR="Red"]-- jetzt sollte der schliessprozess abgebrochen werden![/COLOR]
        [COLOR="Blue"] hide[/COLOR] [COLOR="Green"]meinFenster[/COLOR]
    [COLOR="Blue"][B]end[/B] will close[/COLOR]
    
    Im IB wird das Fenster mit einem Skript verknüpft, dass den oben beschriebenen Handler enthällt. Aber wie kann ich nun Das Programm dazu zwingen ein Fenster nun doch nicht zuschliesen, obwohl der Benutzer den schliessen button gedrückt hat?

    Vorschläge sind hier gerne willkomen

    Grüsse Patric
     
    #14 schnydi, 21.01.06
    Zuletzt bearbeitet: 21.01.06
  15. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Hallo,

    kommt zwar darauf an ob der Event wie anderswo üblich mit einem Rückgabewert implementiert ist, aber versuch es mal mit

    return false

    oder

    return true


    mfg pi26
     
  16. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Um doch auch noch auf das Ursprungsproblem einzugehen;)

    Es hat möglicherweise etwas mit dem Fenstertyp zu tun - diverse Fenstertypen werden im Grunde als Kids des Hauptfensters gehandelt...


    mfg pi26
     
  17. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Also habs gleich mal ausprobiert:

    return true bzw. return false funktioniert nicht.
    Das Fenster wird trozdem geschlossen. Und return alleine geht auch nicht, dass habe ich früher schon ausprobiert.

    trozdem glaube ich es muss doch einen weg geben, den Prozess abzubrechen.

    Das mit den "Untergeordneten" fenster eines Haubtfensters verstehe ich nicht, ich habe meines wissens kein Fenster als main window definiert!
    Alle Fenster meines Programms werden über das Menü aufgeruffen.
     
  18. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    üblicherweise kann man ja für Fenster definieren, ob die rote close-Ampel überhaupt aktiv sein soll, weiss jetzt nicht ob AS-Studio dir diese Möglichkeit lässt. Andernfalls ist "will close" ja vor dem Close, vielleicht gibt es auch einen "close"-Event in dem du dann einfach wieder ein open bzw show einfügst...


    mfg pi26
     
  19. schnydi

    schnydi James Grieve

    Dabei seit:
    08.01.06
    Beiträge:
    137
    Die Fenster müssen eine möglichkeit zum schliessen besitzen.
    So billig läst sich ein Programm nicht überlisten, man kann schon in den "on will close" Handler ein show window einfügen, das fenster wird jedoch gleich danach geschlossen.

    es giebt nur zwei Handler:
    1.) on will close
    2.) should close

    Nun muss ich einer kollegin noch ein neues iBook installieren gehen!
    Ich hoffe dass die neuen PowerMacs oder wie sie dann auch immer heisen "MacMac????" :-D auf den Markt kommen!

    Bis dann
     
  20. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    doch gerade getestet -- du kannst du close-Ampel deaktivieren.

    1. das .nib-Datei öffnen
    2. das ensprechende Fenster wählen
    3. Im Menü Tools den Inspektor wählen
    4. In Title Bar Controls die Checkbox "close" deaktiveren


    mfg pi26
     

Diese Seite empfehlen