我正在嘗試使用腳本橋統計Pages文檔中的單詞(文檔格式爲RTF)。 (我可以它使用NSApplescript但我寧可不要在我的代碼中的AppleScript感知膠帶做) 當我使用AppleScript(和NSAppleScript API)的我能做到這一點很簡單(成功)執行此任務:Scripting Bridge和com.apple.iWork.Pages - 可以工作嗎?
on wordCount(appName,docName)
local mydoc
local wordcount
tell application appName
set mydoc to document docName
set wordcount to count of words of mydoc
log "wordcount = " & wordcount
return wordcount
end tell
end wordCount
然而,當我使用腳本橋嘗試相當於我的所有對象似乎都空內容。我的代碼如下:
+ (NSUInteger) wordCountForApp: (SBApplication*) sbApp docNamed: (NSString*) docName
{
PagesApplication *pages = (PagesApplication*)sbApp;
PagesDocument *doc = [[pages documents] objectWithName:docName];
PagesText *text = [doc bodyText];
SBElementArray *words = [text words];
NSUInteger wc = [words count];
NSLog(@"Pages word count = %ul", (unsigned int) wc);
return wc; // wc comes back as zero always ... grrrr
}
我覈實,我在主線程上運行這個東西(這相當於代碼的工作對文本編輯)。關於正在發生什麼/如何解決的任何想法?
感謝看了這麼遠....
一些奇怪的事情正在發生 - 它只是失敗的橋代碼,它只對頁面(我知道)失敗。我可能不得不打包一個演示,並在另一臺Mac上嘗試它,看看我是否有某種「擁有」。我已經通過調試器和對象回來了,但它們在內部是空的(無論如何根據[NSObject描述])。至於文檔命名問題,在代碼的上下文中不會有問題。無論如何,儘管它可能是,但我不知道你提請我注意的任何工具,謝謝你。關閉調查... – zer0gravitas
所以問題是我要求一個名爲「something.rtf」的文件。和頁面打開「something.rtf」,但*名稱*它「的東西」。然後當你要求名爲「something.rtf」的文檔時,它不會返回nil,因爲該文檔不存在該名稱。相反,它返回一個名爲「something.rtf」的PagesDocument,它沒有有效的內容:一個NIL文檔。我認爲當我提交給SO時,我太愚蠢了。我已經檢查過其他應用程序,這似乎是正常的applescript行爲,當你要求一個文件的名字(獲得一個零文件)哦。 – zer0gravitas
是的,文檔的顯示名稱(可以有擴展名,甚至是本地化的名稱)和磁盤上的名稱之間存在區別。您可能希望按照路徑進行匹配。 –