这个问题真的让我很困惑,因为 AppleScriptObjC 应该可以自己处理垃圾收集。
无论如何,重现此错误的步骤是:
- 创建一个新的 Cocoa-AppleScript-Application 项目
将单个调用插入到
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
:main.m 错误
因此,某处正在对不再存在的对象进行调用。如果我们在NSZombies
启用的情况下分析应用程序,它会确认已向僵尸发送消息并提供以下附加信息:僵尸信息
我也用NSMakeRange
and尝试了同样的事情NSMakeRect
,它给出了完全相同的结果。我怀疑每次调用 Core Foundation 函数都会以这种方式使应用程序崩溃。但是,如果我们作为示例调用 NSTextField 的 stringValue(),它就可以正常工作。
把电话放在外面applicationWillFinishLaunching_
也不能解决它。那么我做错了什么?
我在 OSX Lion 1.7.4 上使用 XCode 4.3.3
编辑:经过一些进一步的研究,我意识到我不需要调用NSMakePoint
,我可以创建一个 AppleScript 记录{|x|:0, |y|:0}
,它就像一个 NSPoint 对象一样工作。这样就解决了,我猜。