这个问题让我很困惑,因为AppleScriptObjC应该可以自行处理垃圾收集。
无论如何,重现此错误的步骤是:
在项目的NSMakePoint
文件中的任意位置插入nameAppDelegate.applescript
的单个调用。该文件现在看起来应该是这样的:
script testAppDelegate
property parent : class "NSObject"
on applicationWillFinishLaunching_(aNotification)
-- Insert code here to initialize your application before any files are opened
set single_point to NSMakePoint(5, 10) of current application
display alert "X-value of point: " & x of single_point
end applicationWillFinishLaunching_
on applicationShouldTerminate_(sender)
-- Insert code here to do any housekeeping before your application quits
display alert "Terminating"
return current application's NSTerminateNow
end applicationShouldTerminate_
end script
上述应用程序将启动并显示警报"X-value of point: 5.0"
(正如预期的那样),但在警报发生后,它将在文件EXC_BAD_ACCESS
中出现以下main.m
错误时崩溃:{{ 3}}
因此,某个地方正在调用一个不再存在的对象。如果我们在启用NSZombies
的情况下对应用程序进行了分析,则会确认已收到僵尸消息并提供此附加信息:main.m error
我也尝试使用NSMakeRange
和NSMakeRect
做同样的事情,它给出了完全相同的结果。我怀疑每次调用Core Foundation函数都会以这种方式使应用程序崩溃。但是,如果我们作为一个例子调用NSTextField的stringValue(),它就可以正常工作。
将呼叫置于applicationWillFinishLaunching_
之外也无法解决。那么我做错了什么?
我在OSX Lion 1.7.4上使用XCode 4.3.3
编辑经过一些进一步的研究,我意识到我不需要拨打NSMakePoint
,我可以创建一个类似{|x|:0, |y|:0}
的AppleScript记录,它就会像一个NSPoint对象。所以这就解决了,我想。