2016-07-05 34 views
0

我創建了一個小腳本來控制httpd/php/mysql,並使用XCode創建一個接口並將其鏈接到此腳本。一切正常。問題是我試圖在點擊紅圈按鈕後關閉應用程序窗口,但沒有發生。該應用程序保持運行,只有窗口關閉。AppleScript + Xcode「applicationShouldTerminateAfterLastWindowClosed_(sender)」not working

我已經嘗試使用:

applicationShouldTerminateAfterLastWindowClosed_(sender) 

整個劇本是這樣的:

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

語法是正確的,該方法應該工作。代理是否在Interface Builder中正確連接? – vadian

+0

感謝vadian。工作得很好。 –

回答

0

正如@vadian說:如果文件擁有者的委託出口連接到App代表看一看(你腳本)正確:

File's Owner Outlet to App Delegate

順便說一句,這是德創建一個新的CocoaApplescript-App後出錯。我只是複製處理器

on applicationShouldTerminateAfterLastWindowClosed_(sender) 
    return true 
end applicationShouldTerminateAfterLastWindowClosed_ 

到腳本和一切工作正常!

玩得開心,邁克爾/漢堡

+0

非常感謝!成功了! –