ApplescriptObjC调用NSMakePoint导致exc_bad_access错误

时间:2013-01-08 19:30:26

标签: cocoa applescript exc-bad-access applescript-objc

这个问题让我很困惑,因为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. 运行应用程序
  4. 上述应用程序将启动并显示警报"X-value of point: 5.0"(正如预期的那样),但在警报发生后,它将在文件EXC_BAD_ACCESS中出现以下main.m错误时崩溃:{{ 3}}

    因此,某个地方正在调用一个不再存在的对象。如果我们在启用NSZombies的情况下对应用程序进行了分析,则会确认已收到僵尸消息并提供此附加信息:main.m error

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

    将呼叫置于applicationWillFinishLaunching_之外也无法解决。那么我做错了什么?

    我在OSX Lion 1.7.4上使用XCode 4.3.3


    编辑经过一些进一步的研究,我意识到我不需要拨打NSMakePoint,我可以创建一个类似{|x|:0, |y|:0}的AppleScript记录,它就会像一个NSPoint对象。所以这就解决了,我想。

0 个答案:

没有答案