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

时间:2014-12-17 01:40:33

标签: 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 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项目中。)

任何帮助都会受到欢迎 - 你可以看到我是新手!

3 个答案:

答案 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"

感谢。