1

这个问题真的让我很困惑,因为 AppleScriptObjC 应该可以自己处理垃圾收集。

无论如何,重现此错误的步骤是:

  1. 创建一个新的 Cocoa-AppleScript-Application 项目
  2. 将单个调用插入到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 
    
  3. 运行应用程序

上面的应用程序将启动并显示警报"X-value of point: 5.0"(如预期的那样),但在警报之后它会立即崩溃并EXC_BAD_ACCESS在文件中出现以下错误main.mmain.m 错误

因此,某处正在对不再存在的对象进行调用。如果我们在NSZombies启用的情况下分析应用程序,它会确认已向僵尸发送消息并提供以下附加信息:僵尸信息

我也用NSMakeRangeand尝试了同样的事情NSMakeRect,它给出了完全相同的结果。我怀疑每次调用 Core Foundation 函数都会以这种方式使应用程序崩溃。但是,如果我们作为示例调用 NSTextField 的 stringValue(),它就可以正常工作。

把电话放在外面applicationWillFinishLaunching_也不能解决它。那么我做错了什么?

我在 OSX Lion 1.7.4 上使用 XCode 4.3.3


编辑:经过一些进一步的研究,我意识到我不需要调用NSMakePoint,我可以创建一个 AppleScript 记录{|x|:0, |y|:0},它就像一个 NSPoint 对象一样工作。这样就解决了,我猜。

4

0 回答 0