我正在使用Applescript Objc在Xcode中构建我的第一个应用程序 - 我已设法根据以下代码交换图像(在名为imageViewOne的插座中):
-- Declarations
property ImagePath : missing value
property imageViewOne : missing value
property NSImage : class "NSImage"
property parent : class "NSObject"
-- set path as variable
set my ImagePath to "/Users/monkey/XCode/testapp/green.png"
set theImage to initWithContentsOfFile_(POSIX path of ImagePath) of alloc() of class "NSImage" of current application
setImage_(theImage) of imageViewOne
虽然这有效,但问题是我需要找到一种方法来使用相对路径,而不是" /Users/monkey/XCode/testapp/green.png" (png包含在XCode项目中。)
任何帮助都会受到欢迎 - 你可以看到我是新手!
答案 0 :(得分:3)
这样的事情对你有用吗?
set parentDirectory to POSIX path of ((path to me as text) & "::")
答案 1 :(得分:1)
AppleScript最初是为Classic Mac OS创建的,它没有UNIX那样的当前目录概念。它有“工作目录”,它经常被混淆为“当前目录”,但却完全不同。
您需要做的(我希望)是找到您可以依赖的某些的绝对路径,例如脚本的位置,或者如果您的脚本是在一个包内,然后将你的相对路径附加到该绝对路径。
对于我自己的iOS应用程序,在带有Cocoa Touch的Objective-C中,我可以获取我的应用程序的Documents文件夹:
- (NSString*) documentDirectoryPath
{
return [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
}
AppleScript可以调用NSHomeDirectory,还是提供功能等效的?
请注意,NSHomeDirectory提供当前应用的目录,而不是用户的家。
编辑:我实际上并不知道AppleScript是否提供了UNIX风格的当前目录。可能确实如此。但是,GUI应用程序在启动时不能指望具有任何特定的当前目录。通常它将是Finder的当前目录,对于OS X,或者对于iOS,它将是程序的当前目录,其呈现应用程序图标并启动它们 - 显示主屏幕的程序。我不知道它叫什么。
只有经典Mac OS,以及Mac OS X上的Carbon都有工作目录的概念。我不认为Windows有它们。 UNIX进程只能有一个当前目录,但是经典Mac OS程序可以拥有与内存允许一样多的工作目录。
工作目录最初是一个黑客,可以使非常旧的Mac 128k可执行文件在Heirarchical Filesystem软盘上执行文件I / O. 1984年的Superbowl Mac有“Macintosh Filesystem”软盘,这些软盘是扁平的而不是heirarchical。也就是说,文件夹中没有文件夹。
要完全清楚,我正在讨论工作目录,因为ORIGINAL AppleScript使用它们。我真的不知道是否修改了AppleScript以添加一个概念 - 一个每个进程 - UNIX风格的当前目录。
即使AppleScript确实提供了当前目录,您也需要明确地设置它,因为正如我所说,你不能指望启动时的当前目录是你期望的。
答案 2 :(得分:1)
我解决了。
set ImagePath to current application's NSBundle's mainBundle()'s bundlePath() as text & "/Contents/Resources/imageName.png"
感谢。