2013-12-18 167 views
0

我想爲應用程序創建一個applescript菜單文件,我需要編輯該文件,以便在文本文件中有腳本,並且我編輯了該文件並將其另存爲腳本文件,但不幸的是它不是通過應用「瞭望的Mac 2011」,甚至當我打開這個文件到腳本編輯器,並試圖挽救它拋出的無法錯誤保存所以請幫助我在此如何以編程方式創建和保存applescript文件

 userpath = [paths objectAtIndex:0]; 
     userpath = [userpath stringByAppendingString:@"/Microsoft User Data/Outlook Script Menu Items/"]; 
     userpath = [userpath stringByAppendingString:@"Create New Conference Event.scptd"]; 

     [[NSFileManager defaultManager] createFileAtPath:userpath contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 

     NSDictionary* errorDis = [[NSDictionary alloc] init]; 
     NSAppleScript *script = [[NSAppleScript alloc] initWithContentsOfURL: [NSURL fileURLWithPath:userpath] error:&errorDis]; 

然後檢測作爲腳本文件我在編譯編輯的文件

NSDictionary* errors = [NSDictionary dictionary]; 
     NSAppleScript* appleScript = [[NSAppleScript alloc] initWithContentsOfURL:url error:&errors]; 
     [appleScript compileAndReturnError:&errors]; 

我是gett這個錯誤

Printing description of errors: 
{ 
    NSAppleScriptErrorNumber = "-43"; 
} 
+0

什麼是內容。另外,Applescript Text文件的擴展名是「.applescript」 – markhunte

+0

,但由outlook使用的蘋果腳本有scpt擴展 – Retro

+0

是的。但是你有.scptd哪個是捆綁的而內容是文本。一個Applescript文本文件可能仍然有效,並且將爲您節省很多麻煩,試圖創建一個編譯的文件類型 – markhunte

回答

1

假設你的'內容'是一個NSString。

只需將scptd擴展名更改爲scpt

userpath = [userpath stringByAppendingString:@"Create New Conference Event.scpt"]; 

     [[NSFileManager defaultManager] createFileAtPath:userpath contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; 

看來,只是這樣做不會保存打開時工作的編譯文件。

UPDATE *


另一種方法是運行一個腳本來存儲使用NSApplescript前景腳本。

示例代碼:

NSString * scriptContent = @"say \"hello\""; 
    NSString * scriptPath [email protected]"\"/Users/USERNAME/Downloads/theScript.scpt\""; 

    NSString * content =[NSString stringWithFormat: @"set script_text to MakeScript()\n my RunMaker(script_text)\n on RunMaker(script_text)\n set file_spec to (%@) \n store script script_text in file_spec replacing yes \n end RunMaker \n on MakeScript() \n script \n %@ \n end script \nend MakeScript",scriptPath,scriptContent]; 

    NSLog(@" content %@", content); 

    NSDictionary* errorDis = [[NSDictionary alloc] init]; 
    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:content]; 
    [script executeAndReturnError:&errorDis]; 

    NSLog(@" errorDis %@", errorDis); 

的代碼編譯和運行爲:

set script_text to MakeScript() 
my RunMaker(script_text) 
on RunMaker(script_text) 
set file_spec to ("/Users/USERNAME/Downloads/theScript.scpt") 
store script script_text in file_spec replacing yes 
end RunMaker 
on MakeScript() 
script 
    say "hello" 
end script 
end MakeScript 

保存命名theScript.scpt腳本文件中下載。 (從我現有的一個蘋果筆,可以縮短)

+0

仍然沒有檢測到它的前景,它有任何方式來閱讀和編輯applescript文件?我的意思是編譯一個 – Retro

+0

當你在Applescript編輯器中打開 – markhunte

+0

時會發生什麼,並且我可以執行它,但是Outlook未檢測到它,如果我嘗試保存該文件,則說它無法保存 – Retro