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.m: main.m エラー

したがって、どこかで、もはや存在しないオブジェクトへの呼び出しが行われています。アプリケーションをNSZombies有効にしてプロファイリングすると、ゾンビにメッセージが送信されたことが確認され、次の追加情報が表示されます:ゾンビ情報

NSMakeRange代わりにandでも同じことを試しましたが、NSMakeRectまったく同じ結果が得られます。Core Foundation 関数を呼び出すたびに、この方法でアプリケーションがクラッシュするのではないかと思います。ただし、例として NSTextField の stringValue() を呼び出すと、問題なく動作します。

呼び出しを の外に置いてapplicationWillFinishLaunching_も解決しません。それで、私は何を間違っていますか?

OSX Lion 1.7.4でXCode 4.3.3を使用しています


編集:さらに調査した結果、 を呼び出す必要がないことに気付きました。AppleScriptNSMakePointレコードを作成する{|x|:0, |y|:0}だけで、NSPoint オブジェクトと同じように機能します。それで解決すると思います。

4

0 に答える 0