AppleScript:如何将属性设置为文件路径?

时间:2018-02-24 06:33:16

标签: applescript filepath properties-file applescript-objc

背景
我正在通过Xcode处理AppleScript应用程序(ASOBJ),并经常访问(更新/检索)我创建的.plist文件中的各种条目。

每当我需要访问数据时,我都使用以下命令:

set thePropertyListFilePath to POSIX path of (path to resource "Data.plist")
tell application "System Events"
    tell property list file thePropertyListFilePath
        set myAge to value of property list item "userAge" as text
    end tell
end tell

问题
我的项目正在开发中,文件名/路径变化太频繁了。 我想在项目的顶部创建一个property thePropertyListFilePath : [...],以便能够在一个地方更改文件的路径和名称,而不是多个。
我希望property使用set,因为它在我的情况下效果更好。

在我的代码顶部:
property thePropertyListFilePath : POSIX path of (path to resource "Data.plist")

无法编译,因为:

  

错误:找不到资源。

分析
我知道资源Data.plist是应该的位置,路径是正确的,因为它在我的顶部代码片段内工作正常。 离开我这个问题:

如何将属性设置为文件路径?

非常感谢任何有关为什么抛出此错误以及如何正确地将属性设置为此(相对)文件路径的信息。我知道this question,但它没有提供适用的解决方案。欢呼声。

修改
我现在似乎得到了一个相关的错误:

  

系统事件出错了:'这个   苹果:用户:myuser的:图书馆:开发商:Xcode中:DerivedData:项目名:体形:产品:调试:ProjectName.app:内容:资源:Data.plist”   不是属性列表文件。 (错误-1728)

某些验证需要在应用启动之前进行,因此我在applicationWillFinishLaunching_部分编写了我的代码 - 这不会出现任何问题。

我知道该文件存在.plist格式,因此我认为它可能只是围绕它的tell ...语句。
过去,我使用set currentVersion to (current application's class "NSBundle"'s mainBundle()'s objectForInfoDictionaryKey:"CFBundleShortVersionString") as text一次性访问Info.plist中的版本号。是否可以使用类似的单行代码而不使用tell语句从我自己的userAge文件中检索plist

1 个答案:

答案 0 :(得分:0)

不要那样做。永远不要声明具有相对路径的属性。该值将在编译时设置,永远不会更改。这使得相对路径的好处毫无用处。

将属性声明为空字符串

property thePropertyListFilePath : ""

并将其设置为applicationDidFinishLaunching

on applicationDidFinishLaunching_(aNotification)
   set thePropertyListFilePath to POSIX path of (path to resource "Data.plist")
end applicationWillFinishLaunching_

然而,当您正在开发AppleScriptObjC时,我推荐使用Cocoa方式(更长但更高效)

set thePropertyListFilePath to (current application's NSBundle's mainBundle()'s pathForResource_ofType_("Data", "plist")) as text