Objective-c のコードだけで NSApp を作るソースを作成。
って以前 PyObjC で作ったんだから Objective-c に書き戻すだけだ。
と思ったんだけど動かない、何故だ?
検索しまくって以下のページを見つけた。
setActivationPolicy を追加したらなんとか動くようになった。
逆に PyObjC は何故いらないんだ?
それとガベージコレクションではないので破棄が必要なんだなこれが。
NSAutoreleasePool という便利なものはこう使うみたい。
#import <Cocoa/Cocoa.h> // clang app.m -framework Cocoa @interface AppMenu : NSMenu //- (id) init; // いらない @end @implementation AppMenu - (id) init { [super init]; id item_app = [[NSMenuItem new] autorelease]; [self addItem:item_app]; id menu_app = [[NSMenu new] autorelease]; [item_app setSubmenu:menu_app]; id item_quit = [[NSMenuItem new] autorelease]; [item_quit initWithTitle:@"Quit App" action:@selector(terminate:) keyEquivalent:@"q"]; [menu_app addItem:item_quit]; return self; } @end int main(int argc, char *argv[]) { // ガベージコレクションではないのでコレを利用 [NSAutoreleasePool new]; // NSApp を作る [NSApplication sharedApplication]; // C ではコレが必須だった [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; // command+Q で終了するメニューを入れる id main_menu = [[AppMenu new] autorelease]; [NSApp setMainMenu:main_menu]; // コレをしないと最前面に出てこない [NSApp activateIgnoringOtherApps:YES]; // メインループを回す [NSApp run]; // return 0; }
動いたんだけど。。。。。
command+Q は使えるんだけどメニューが選択できない。
一度非アクティブにして再度アクティブ化すればイケるんだけど。
てかリンク元のコードも同じジャン。
PyObjC 版はそんな必要なんて無いのに何故だろう?
どうでもいかもしれないけれど、M1 Mac でビルドしたんだけど。
Silicon Info で確認したらこの a.out は arm64 で動いていた。
ついでに。
SyntaxHighlighter は objective-c ハイライトが無いのね。
BloggerのSyntaxHighlighterでObjective-Cを表示する方法 – menXpon
作っている人がいるってのが有名アプリのいいところ。
筆者の WordPress は自前設置なので scripts に放り込むだけ。
後は Add Code to Head プラグインの設定で以下を追加。
<script type="text/javascript" src="/sh2/scripts/shBrushObjectiveC.js"></script>
プレビュー、よしハイライトできた。
ただ Objective-c なんて今後そんなに使うか疑問なんだけど。