Applescript 无法获取要使用的图像的相对位置,必须使用绝对路径

Applescript 无法获取要使用的图像的相对位置,必须使用绝对路径,applescript,xcode6,applescript-objc,Applescript,Xcode6,Applescript Objc,我正在使用Applescript Objc在Xcode中构建我的第一个应用程序-我已经成功地让它在名为imageViewOne的插座中交换了一个图像,基于以下代码: -- Declarations property ImagePath : missing value property imageViewOne : missing value property NSImage : class "NSImage" property parent : class "NSObject" -- set

我正在使用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项目中


任何帮助都会得到很好的回应——正如你所看到的,我对这一点还不熟悉

AppleScript最初是为经典Mac OS创建的,它不像UNIX那样具有当前目录的概念。它有工作目录,这些目录经常与当前目录混淆,但它们完全不同

我希望你需要做的是找到你可以依赖的东西的绝对路径,比如你的脚本的位置,或者如果你的脚本在一个包中,那么你的应用程序包的位置,然后把你的相对路径附加到这个绝对路径上

对于我自己的iOS应用程序,在Objective-C和Cocoa Touch中,我可以通过以下方式获取我的应用程序的文档文件夹:

- (NSString*) documentDirectoryPath
{
    return [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
}
AppleScript可以调用NSHomeDirectory吗,或者它是否提供了一个功能等价物

请注意,NSHomeDirectory提供当前应用程序的目录,而不是用户的主页

编辑:我不知道AppleScript是否提供UNIX风格的当前目录。可能是的。但是,GUI应用程序不能指望在启动时拥有任何特定的当前目录。通常它将是Finder的当前目录,对于OSX或iOS,它将是显示应用程序图标并启动它们的程序的当前目录-显示主屏幕的程序。我不知道它叫什么

只有经典的Mac OS以及Mac OS X上的Carbon才有工作目录的概念。我想Windows没有。UNIX进程只能有一个当前目录,但经典Mac OS程序可以有内存允许的任意多个工作目录

工作目录最初是一种使非常古老的Mac 128k可执行文件能够在其体系结构文件系统软盘上进行文件I/O的黑客攻击。1984年的超级碗(Superbowl)Mac电脑上的Macintosh文件系统是扁平的,不具有继承性。也就是说,文件夹中不能有文件夹

说得很清楚,我讨论的是工作目录,因为最初的AppleScript使用了它们。我真的不知道AppleScript是否已经被修改为添加了-one per process-UNIX风格的当前目录的概念


即使AppleScript确实提供了当前目录,您也需要显式地设置它,因为正如我所说的,您不能指望启动时的当前目录是您所期望的。AppleScript最初是为经典Mac OS创建的,它不像UNIX那样具有当前目录的概念。它有工作目录,这些目录经常与当前目录混淆,但它们完全不同

我希望你需要做的是找到你可以依赖的东西的绝对路径,比如你的脚本的位置,或者如果你的脚本在一个包中,那么你的应用程序包的位置,然后把你的相对路径附加到这个绝对路径上

对于我自己的iOS应用程序,在Objective-C和Cocoa Touch中,我可以通过以下方式获取我的应用程序的文档文件夹:

- (NSString*) documentDirectoryPath
{
    return [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
}
AppleScript可以调用NSHomeDirectory吗,或者它是否提供了一个功能等价物

请注意,NSHomeDirectory提供当前应用程序的目录,而不是用户的主页

编辑:我不知道AppleScript是否提供UNIX风格的当前目录。可能是的。但是,GUI应用程序不能指望在启动时拥有任何特定的当前目录。通常它将是Finder的当前目录,对于OSX或iOS,它将是显示应用程序图标并启动它们的程序的当前目录-显示主屏幕的程序。我不知道它叫什么

只有经典的Mac OS以及Mac OS X上的Carbon才有工作目录的概念。我想Windows没有。UNIX进程只能有一个当前目录,但经典Mac OS程序可以有内存允许的任意多个工作目录

工作目录最初是一种使非常古老的Mac 128k可执行文件能够在其体系结构文件系统软盘上进行文件I/O的黑客攻击。1984年的超级碗(Superbowl)Mac电脑上的Macintosh文件系统是扁平的,不具有继承性。也就是说,文件夹中不能有文件夹

说得很清楚,我讨论的是工作目录,因为最初的AppleScript使用了它们。我真的不知道AppleScript是否已经被修改为添加了-one per process-UNIX风格的当前目录的概念


即使AppleScript确实提供了当前目录,您也需要显式地设置它,因为正如我所说的,您不能指望启动时的当前目录是您所期望的 你呢


你喜欢这个工作吗

set parentDirectory to POSIX path of ((path to me as text) & "::")
我算出来了

set ImagePath to current application's NSBundle's mainBundle()'s bundlePath() as text & "/Contents/Resources/imageName.png"
谢谢。

我算出来了

set ImagePath to current application's NSBundle's mainBundle()'s bundlePath() as text & "/Contents/Resources/imageName.png"

谢谢。

告诉我们工作目录与当前目录有什么不同。AppleScript中主文件夹的路径返回指向当前用户主文件夹的别名对象;主文件夹路径的POSIX路径返回POSIX样式的路径字符串。请告诉我们工作目录与当前目录有何不同。AppleScript中主文件夹的路径返回指向当前用户主文件夹的别名对象;主文件夹路径的POSIX path返回POSIX样式的路径字符串。是的,看起来资产在您的包中,因此,只需使用path to me,然后添加路径的其余部分。这似乎不起作用:代码将UnixPath设置为path to me的POSIX path,作为文本-::代码无法将«class ocid»id«data optr00000000609B220080600000»设置为类型常量。错误-1700是的,看起来资产在您的捆绑包中,所以只需使用路径到我,然后添加路径的其余部分。它似乎不起作用:代码将UnixPath设置为路径到我的POSIX路径作为文本-::代码无法将«class ocid»id«data optr00000000609B220080600000»设置为类型常量。错误-1700