2016-07-05 20 views
0

Ich habe ein kleines Skript zur Steuerung von httpd/php/mysql erstellt und mit XCode eine Schnittstelle zu diesem Skript erstellt und verlinkt. Alles funktioniert gut. Das Problem ist, dass ich versuche, das Anwendungsfenster zu schließen, nachdem auf die Schaltfläche mit dem roten Kreis geklickt wurde und es nicht passiert. Die App läuft weiter und nur das Fenster ist geschlossen.Applescript + Xcode "applicationShouldTerminateAfterLastWindowClosed_ (sender)" funktioniert nicht

Ich habe versucht mit:

applicationShouldTerminateAfterLastWindowClosed_(sender) 

Das gesamte Skript ist dies:

script AppDelegate 

#### PROPERTY LIST #### 
    property parent : class "NSObject" 
    property startApache : missing value 
    property restartApache : missing value 
    property stopApache : missing value 
    property editConfig : missing value 
    property editVHosts : missing value 
    property openDir : missing value 
    property resetConfig : missing value 
    property editPHP : missing value 
    property resetPHPConfig : missing value 
    property startMYSQL : missing value 
    property stopMYSQL : missing value 
    property restartMYSQL : missing value 
    property openDirMYSQL : missing value 
    property resetMYSQL : missing value 

#### APACHE CMDs #### 
    on startApache_(sender) 
     do shell script "/usr/sbin/apachectl start" with administrator privileges 
    end startApache_ 

    on restartApache_(sender) 
     do shell script "/usr/sbin/apachectl restart" with administrator privileges 
    end restartApache_ 

    on stopApache_(sender) 
     do shell script "/usr/sbin/apachectl stop" with administrator privileges 
    end stopApache_ 

    on editConfig_(sender) 
     do shell script "open -a /Applications/BBEdit.app /private/etc/apache2/httpd.conf" 
    end editConfig_ 

    on editVHosts_(sender) 
     do shell script "open -a /Applications/BBEdit.app /private/etc/apache2/extra/httpd-vhosts.conf" 
    end editVHosts_ 

    on openDir_(sender) 
     do shell script "open /Library/WebServer/Documents/" 
    end openDir_ 

    on resetConfig_(sender) 
     display dialog "Are you sure you want to reset the httpd.conf to it's default settings?\n\n This cannot be undone!" with icon stop with title "Reset Configuration File" 
     do shell script "/usr/sbin/apachectl stop" with administrator privileges 
     do shell script "cp /private/etc/apache2/httpd.conf.pre-update /private/etc/apache2/httpd.conf ; cp /private/etc/apache2/extra/httpd-vhosts.conf.default /private/etc/apache2/extra/httpd-vhosts.conf" with administrator privileges 
    end resetConfig_ 

#### PHP CMDs #### 
    on editPHP_(sender) 
     do shell script "open -a /Applications/BBEdit.app /etc/php.ini" 
    end editPHP_ 

    on resetPHPConfig_(sender) 
     display dialog "Are you sure you want to reset the php.ini to it's default settings?\n\n This cannot be undone!" with icon stop with title "Reset Configuration File" 
     do shell script "cp /etc/php.ini.default /etc/php.ini" with administrator privileges 
    end resetPHPConfig_ 

#### MYSQL CMDs #### 
    on startMYSQL_(sender) 
     do shell script "/usr/local/bin/mysql.server start" with administrator privileges 
    end startMYSQL_ 

    on restartMYSQL_(sender) 
     do shell script "/usr/local/bin/mysql.server restart" with administrator privileges 
    end restartMYSQL_ 

    on stopMYSQL_(sender) 
     do shell script "/usr/local/bin/mysql.server stop" with administrator privileges 
    end stopMYSQL_ 

    on openDirMYSQL_(sender) 
     do shell script "open /usr/local/var/mysql/" 
    end openDirMYSQL_ 

    on resetMYSQL_(sender) 
     display dialog "Are you sure you want to reset ALL MySQL databases to their default?\n\n This cannot be undone!" with icon stop with title "Reset All Databases" 
     display dialog "Type the new root password" default answer "" with hidden answer 
     set root_pass to text returned of result 
     if root_pass = "" then 
      display dialog "Root password cannot be blank!" buttons {"Cancel"} with icon Caution 
      error number -128 
     else 
      display dialog "MySQL DB will be recriated in the background.\n\nClick on reset and wait." buttons {"Cancel","Reset"} 
      do shell script "/usr/local/bin/mysql.server stop" with administrator privileges 
      do shell script "rm -rf /usr/local/var/mysql" with administrator privileges 
      do shell script "/usr/local/bin/mysqld --initialize-insecure" 
      do shell script "/usr/local/bin/mysql.server start" 
      do shell script "/usr/local/bin/mysqladmin -u root password '"&root_pass&"'" 
      display dialog "All done!\n\nDatabase reseted." buttons {"Ok"} with title "MySQL Reset Utility" 
     end if 
    end resetMYSQL_ 

    on applicationWillFinishLaunching_(aNotification) 
    end applicationWillFinishLaunching_ 

    on applicationShouldTerminateAfterLastWindowClosed_(sender) 
     return true 
    end applicationShouldTerminateAfterLastWindowClosed_ 

    on applicationShouldTerminate_(sender) 
     return current application's NSTerminateNow 
    end applicationShouldTerminate_ 

end script 
+1

Die Syntax ist korrekt und die Methode sollte funktionieren. Ist der Delegat ordnungsgemäß in Interface Builder verbunden? – vadian

+0

Danke vadian. Arbeitete gut. –

Antwort

0

Wie @vadian sagte: Werfen Sie einen Blick, wenn die Delegierten Besitzerdatei Steckdose AppDelegate verbunden ist (Ihr script) richtig:

File's Owner Outlet to App Delegate

BTW ist dies die de Fehler nach dem Erstellen einer neuen CocoaApplescript-App. Ich kopierte einfach den Handler

on applicationShouldTerminateAfterLastWindowClosed_(sender) 
    return true 
end applicationShouldTerminateAfterLastWindowClosed_ 

in das Skript und alles hat gut funktioniert!

Viel Spaß, Michael/Hamburg

+0

Vielen Dank! Hat funktioniert! –

Verwandte Themen