AppleScript:如何将 属性 设置为文件路径?
AppleScript: How do I set a property to a file path?
背景
我正在通过 Xcode 开发 AppleScript 应用程序 (ASOBJ),并经常访问 (update/retrieve) 我创建的 .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")
不编译因为:
Error: Resource not found.
分析
我知道资源 Data.plist
是它应该在的位置并且路径是正确的,因为它在我的顶级代码片段中运行良好。
留给我一个问题:
如何将 属性 设置为文件路径?
如果能深入了解为什么会抛出此错误以及如何将 属性 正确设置为此(相对)文件路径,我们将不胜感激。我知道 ,但它没有提供适用的解决方案。干杯。
编辑
我现在似乎遇到了相关错误:
System Events got an error: 'This
Mac:Users:myuser:Library:Developer:Xcode:DerivedData:ProjectName:Build:Products:Debug:ProjectName.app:Contents:Resources:Data.plist'
is not a property list file. (error -1728)
在应用程序启动之前需要进行一些验证,所以我在 applicationWillFinishLaunching_
部分编写了我的代码 - 这应该不会出现任何问题。
我知道文件在那里并且是 .plist
格式所以我认为它可能只是它周围的 tell ...
语句。
以前都是用set currentVersion to (current application's class "NSBundle"'s mainBundle()'s objectForInfoDictionaryKey:"CFBundleShortVersionString") as text
从Info.plist
中一次性获取版本号的。是否可以在没有 tell 语句的情况下使用类似的单行代码从我自己的 plist
文件中检索 userAge
?
不要那样做。切勿使用相对路径声明 属性。该值将在编译时设置并且永远不会改变。这使得相对路径的好处变得无用。
将 属性 声明为空字符串
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
背景
我正在通过 Xcode 开发 AppleScript 应用程序 (ASOBJ),并经常访问 (update/retrieve) 我创建的 .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")
不编译因为:
Error: Resource not found.
分析
我知道资源 Data.plist
是它应该在的位置并且路径是正确的,因为它在我的顶级代码片段中运行良好。
留给我一个问题:
如何将 属性 设置为文件路径?
如果能深入了解为什么会抛出此错误以及如何将 属性 正确设置为此(相对)文件路径,我们将不胜感激。我知道
编辑
我现在似乎遇到了相关错误:
System Events got an error: 'This Mac:Users:myuser:Library:Developer:Xcode:DerivedData:ProjectName:Build:Products:Debug:ProjectName.app:Contents:Resources:Data.plist' is not a property list file. (error -1728)
在应用程序启动之前需要进行一些验证,所以我在 applicationWillFinishLaunching_
部分编写了我的代码 - 这应该不会出现任何问题。
我知道文件在那里并且是 .plist
格式所以我认为它可能只是它周围的 tell ...
语句。
以前都是用set currentVersion to (current application's class "NSBundle"'s mainBundle()'s objectForInfoDictionaryKey:"CFBundleShortVersionString") as text
从Info.plist
中一次性获取版本号的。是否可以在没有 tell 语句的情况下使用类似的单行代码从我自己的 plist
文件中检索 userAge
?
不要那样做。切勿使用相对路径声明 属性。该值将在编译时设置并且永远不会改变。这使得相对路径的好处变得无用。
将 属性 声明为空字符串
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