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