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 オブジェクトと同じように機能します。それで解決すると思います。