2016-08-03 90 views
0

我完全忘記了Xcode AppleScript應用程序。Xcode:讀取plist數據並將它們顯示爲文本

基本上,應用程序將從plist文件讀取值。

我的AppleScript來讀取這個變量是

set the plistfile_path to "~/Desktop/example.plist" 

tell application "System Events" 
    set p_list to property list file (plistfile_path) 
    -- read the plist data 
    set theNameFromPlist to value of property list item "theName" of p_list 
    set theEmailFromPlist to value of property list item "theEmail" of p_list 
    set thecreationDateFromPlist to value of property list item "creationDate" of p_list 


end tell 

現在我怎麼這個集成到Xcode的?

我應該繼續AppDelegate.applescript並在「applicationWillFinishLaunching_(aNotification)」這個腳本之後的任何地方添加嗎?

followed by property NametextField : theNameFromPlist 

我在這裏可能完全錯了,只是想不到。 PS迅速將做到這一點,如果任何容易

+0

在Xcode中忘了'系統Events'和使用AppleScriptObjC中的原生Cocoa類。 – vadian

回答

1

就像vadian說,在評論,在Xcode中,系統事件將無法正常運行,所以你可以只使用天然可可類,但我更喜歡使用 「做shell腳本」 AppleScript的/ asobjc命令並運行了「默認值」命令,所以這裏是一個辦法做到這一點,當應用程序將完成啓動:

on applicationWillFinishLaunching_(aNotification) 
    set plistFile to "~/Desktop/example.plist" 
    set theNameFromPlist to do shell script "defaults read " & plistFile & " theName" 
    set theEmailFromPlist to do shell script "defaults read " & plistFile & " theEmail" 
    set theCreationDateFromPlist to do shell script "defaults read " & plistFile & " creationDate" 
end applicationWillFinishLaunching_ 

而且,如果你想在一個文本字段,以顯示在一個窗口 名稱您可以添加Interface Builder來修改代碼:

property nameTextField : missing value 

on applicationWillFinishLaunching_(aNotification) 
    set plistFile to "~/Desktop/example.plist" 
    set theNameFromPlist to do shell script "defaults read " & plistFile & " theName" 
    set theEmailFromPlist to do shell script "defaults read " & plistFile & " theEmail" 
    set theCreationDateFromPlist to do shell script "defaults read " & plistFile & " creationDate" 
    tell nameTextField to setStringValue_(theNameFromPlist) 
end applicationWillFinishLaunching_ 

(確保財產nameTextField連接到TextField在界面生成器)

希望這有助於! :d

+0

這看起來不錯,我可以試一下,謝謝 –

+0

順便說一句,對於更復雜的\ sllas目錄例如../Applications/My \ Awesome \ App.app /然後我建議修改代碼。 do shell script「defaults read」&plistFile&「theName」,use:do shell script「defaults read \」「&plistFile&」\「theName」(我之前沒有添加\「因爲當使用〜/ in」\ ,它不能正常工作,但很高興我可以幫助) – Lucasware

1

提起Cocoa類我其實是這個

set plistFile to POSIX path of (path to desktop) & "example.plist" 
set thePlist to (current application's NSDictionary's dictionaryWithContentsOfFile:plistFile) as record 
set theNameFromPlist to thePlist's theName 
set theEmailFromPlist to thePlist's theEmail 

要添加新鍵值對,寫的plist回磁盤添加

set thePlist to thePlist & {stringKey:"Foo", booleanKey:false} 
set cocoaDictionary to current application's NSDictionary's dictionaryWithDictionary:thePlist 
cocoaDictionary's writeToFile:plistFile atomically:true 
+0

這是非常有用的!我如何去寫(即修改)plist中的一個項目?上述命令似乎只適用於閱讀。我有一個字符串和布爾值,我想寫入文件。你可能會添加那部分數據被保存回plist的部分嗎?這會幫助我很多。 – ProGrammer

+0

我更新了答案。 – vadian

+0

我很困惑,因爲我正在尋找採取文本字段的值和複選框的狀態並在plist中更新它們。最初,我使用頂級代碼從plist讀取數據並設置組件的文本/狀態。現在,我添加了一個保存按鈕來寫回數據而不用替換整個文件(只需更新值)。有些內容符合:'將Plist的savedText設置爲guiTextbox的stringValue()'。是否有一種簡單的方法來更新單個值,用一些簡單的方法呢? – ProGrammer

相關問題